常用的排序算法有哪些?

- 冒泡排序

  1.元素两两比较,然后将较大的元素逐步向后偏移(将最大值逐步移动到最后位置)
  2.循环上一步操作即可

#step1:
#def maopao(alist):
#    for i in range(len(alist)-1):
#        if alist[i] > alist[i+1]:
#            alist[i],alist[i+1] = alist[i+1],alist[i]
#    return alist
#step2
def maopao(alist):
    for j in range(len(alist)-1):
        for i in range(len(alist)-1-j):
            if alist[i] > alist[i+1]:
                alist[i],alist[i+1] = alist[i+1],alist[i]
    return alist

- 动图演示:

 -  选择排序

  1.将乱序序列中的最大值找出,直接让其和最后一个元素交换位置即可
  2.循环第一步

def xuanze(alist):
    for j in range(len(alist)-1):
        max_index = 0 #保存最大元素的下标
        for i in range(len(alist)-1-j):
            if alist[i+1] > alist[max_index]:
                max_index = i+1
        alist[max_index],alist[len(alist)-1-j] = alist[len(alist)-1-j],alist[max_index]
    return alist
    

- 动图演示

 

- 插入排序

插入排序:将无序部分的元素以此插入到有序部分即可
  - 把乱序序列假设拆分成两部分
    - 有序部分:默认将第一个元素
    - 无序部分:剩下元素

            
    i:表示有序部分元素的个数,alist[i]无序部分的第一个元素,alist[i-1]有序部分的最后一个元素
    i = 1
    if alist[i] < alist[i-1]:
        alist[i],alist[i-1] = alist[i-1],alist[i]
        
    i = 2
    while i >= 1:
        if alist[i] < alist[i-1]:
            alist[i],alist[i-1] = alist[i-1],alist[i]
            i -= 1
        else:
            break
            
'''

def charu(alist):
    for i in range(1,len(alist)):
        while i >= 1:
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
                i -= 1
            else:
                break
    return alist

- 动图演示

 # 希尔排序

'''
    希尔排序:
        - gap:初始值就是序列个数整除2
        - gap的作用:
            - gap表示间隔
            - gap表示组数
        - 插入排序就是增量为1的希尔排序
'''
def xier(alist):
    gap = len(alist) // 2
    while gap >= 1:
        for i in range(gap,len(alist)):
            while i >= gap:
                if alist[i] < alist[i-gap]:
                    alist[i],alist[i-gap] = alist[i-gap],alist[i]
                    i -= gap
                else:
                    break
        gap //= 2
    return alist

 

- 快速排序

'''
    快速排序:
        - 基数mid:默认将序列中的第一个元素做为基数的值即可。
            - 实现一个效果:将序列中的元素进行移动,基数左侧都是比基数小的元素,右侧都是比基数大的元素
'''
def quickSort(alist,start,end):
    low = start
    hight = end
    
    if low > hight:
        return #结束递归的条件
        
    mid = alist[low]
    while low < hight:
        while low < hight:
            if alist[hight] > mid:
                hight -= 1
            else:
                alist[low] = alist[hight]
                break
        while low < hight:    
            if alist[low] < mid:
                low += 1
            else:
                alist[hight] = alist[low]
                break    
        if low == hight:
            alist[low] = mid
        
    quickSort(alist,start,hight-1)
    quickSort(alist,low+1,end)
    return alist
alist = [3, 5, 8, 1, 2, 9, 4, 7, 6]    
print(quickSort(alist,0,len(alist)-1))

- 动图演示

 

 

posted @ 2021-12-01 11:10  urls  阅读(67)  评论(0编辑  收藏  举报