zoukankan      html  css  js  c++  java
  • 四种常见排序算法(快速,冒泡,插入,选择排序)

    #插入排序算法
    def insert_sort(lst):
        for i in range(1,len(lst)): #开始时片段[0:1]已排序
            # print(i)
            x = lst[i]
            j = i
            while j > 0 and lst[j-1] > x:
                lst[j] = lst[j-1] #反序逐个后移元素,确定插入位置
                j -= 1
            lst[j] = x
        print(lst)
    
    insert_sort([2,3,1,4,5])
    
    
    #选择排序算法
    def select_sort(lst):
        for i in range(len(lst) - 1): #只需要循环len(lst) - 1次
            k = i
            for j in range(i,len(lst)): # k是已知最小元素的位置  这个循环就是把最小元素k找出来
                if lst[j] < lst[k]:
                    k = j
            if i != k:             #lst[k] 是确定的最小元素,检查是否需要交换
                lst[i],lst[k] = lst[k],lst[i]
        print(lst)
    
    select_sort([3,2,4,1,5])
    
    #冒泡(交换)排序算法
    def bubble_sort(lst):
        for i in range(len(lst)):
            found = False
            for j in range(1,len(lst) - i):
                if lst[j-1] > lst[j]:
                    lst[j-1],lst[j] = lst[j],lst[j-1]
                    found = True
            if not found:
                break
        print(lst)
    
    bubble_sort([30,13,25,16,47,26,19,10])
    
    #快速排序 20世纪最具影响力的算法之一
    def quick_sort(lst):
        qsort_rec(lst,0,len(lst)-1)
        # print(lst)
    
    def qsort_rec(lst,l,r):
        if l >= r:
            return   #分段无记录 或只有一个记录  只有一个数值的时候 下面就不进行了
        i = l
        j = r
        pivot = lst[i]  #是初始空位
        while i < j:    #找pivot的最终位置
            while i < j and lst[j] >= pivot:  #最后一个和第一个进行比较  后面大则 进行下去
                j -= 1                   #用j向左扫描小于pivot的记录
            if i < j:
                lst[i] = lst[j]
                i += 1                  #小记录移动到左边
                print(lst)
            while i < j and lst[i] <= pivot:
                i += 1                     #用i向右扫描找大于pivot的记录
            if i < j:
                lst[j] = lst[i]
                j -= 1                  #大记录移到右边
                print(lst)
        lst[i] = pivot  #将pivot存入其最终位置
        # print(lst)
        qsort_rec(lst,l,i-1)               #递归处理左半区间
        qsort_rec(lst,i+1,r)                #递归处理右半区间
    
    # quick_sort([30,13,25,16,47,26,19,10])
    quick_sort([4,3,5,1,2])
  • 相关阅读:
    java 版下载地址
    java文档
    中文打包之后无法显示
    通过Unity3d创建二维码(利用zxing2.2)
    通过NavMeshObstacle解决NavMesh防卡
    EditorGUILayout.EnumPopup 枚举弹出选择菜单
    价格表
    热更新脚本C#light,ulua,Scorpio性能比较
    Ngui 五种点击事件实现方式及在3d场景中点透的情况
    linux每日命令(38):iostat命令
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8733167.html
Copyright © 2011-2022 走看看