常见排序算法的python 代码实现

冒泡排序

[10,6,27,9,15,38,49,20]

原理

第一次排序:
[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,9,27,15,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,49,20]
[6,10,9,15,27,38,20,49]
第二次排序:
[6,10,9,15,27,38,20,49]
[6,10,9,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,38,20,49]
[6,9,10,15,27,20,38,49]
第三次排序:
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,27,20,38,49]
[6,9,10,15,20,27,38,49]
第四次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第五次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第六次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第七次排序:
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
第八次排序:
[6,9,10,15,20,27,38,49]

代码实现

def bubbleSort(lis):
    for i in range(0,len(lis)):
        for j in range(0,len(lis)-1-i):
            if(lis[j]>lis[j+1]):
                lis[j],lis[j+1]=lis[j+1],lis[j]
    return lis

插入排序

原理

[10,6,27,9,15,38,49,20]

[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,20,27,38,49]

代码实现

def insertSort(lis):
    for i in range(1,len(lis)):
        for j in range(0,i):
            if(lis[i]<lis[j]):
                lis.insert(j,lis[i])
                lis.pop(i+1)
                break
    return lis

快速排序

原理

[10,6,27,9,15,38,49,20]

[10,6,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]

代码实现

def quickSort(lis):
    if(len(lis)>1):
        mid=lis[0]
        left=[]
        right=[]
        lis.remove(mid)
        for num in lis:
            if num<=mid:
                left.append(num)
            else:
                right.append(num)
        return quickSort(left)+[mid]+quickSort(right)
    else:
        return lis

希尔排序

原理

[10,6,27,9,15,38,49,20]

[10,6,27,9,15,38,49,20]
步长为4:
[10,15] [6,38] [27,49] [9,20]
[10,6,27,9,15,38,49,20]
步长为2:
[10,27,15,49][6,9,38,20]
[10,15,27,49][6,9,20,38]
[10,6,15,9,27,20,49,38]
步长为1:
[6,9,10,15,20,27,38,49]

代码实现

def shellSort(lis):
    gap=len(lis)//2
    while gap>0:
        for i in range(gap,len(lis)):
            j=i
            while j>=0 and lis[j-gap]>lis[j]:
                lis[j-gap],lis[j]=lis[j],lis[j-gap]
                j=j-gap
        gap=gap//2
    return lis

选择排序

原理

[10,6,27,9,15,38,49,20]
[6,10,27,9,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,27,15,38,49,20]
[6,9,10,15,27,38,49,20]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]
[6,9,10,15,20,27,38,49]

代码实现

def selectSort(lis):
    i=0
    while i<len(lis)-1:
        minnum=lis[i]
        for j in range(i,len(lis)):
            if lis[j]<=minnum:
                minnum=lis[j]
        lis.remove(minnum)
        lis.insert(i,minnum)
        i+=1
    return lis
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值