python各种排序

选择排序

#coding:utf-8
#选择排序:拿第一个位置的数依次和后面的数相比,谁小就放前面,以后每一轮拿每个位置的数和后面依次比较
def cho(a):
    for i in range(len(a)-1):
        for j in range(i+1,len(a)):
            if a[i]>a[j]:
                a[i],a[j]=a[j],a[i]
    return a
a=[3,2,1,4]
print(cho(a))

'''
过程分析:
3 2 1 4
2 3 1 4(3和2比)
1 3 2 4(2和1比)
1 3 2 4(1和4比)
1 2 3 4(3和2比)
1 2 3 4(2和4比)
1 2 3 4(3和4比)
'''

冒泡排序

#coding:utf-8
#冒泡排序:从左往右,依次比较相邻的两个元素,大的向右排
def cho(a):
    for i in range(len(a)-1):
        for j in range(len(a)-i-1):
            if a[j]>a[j+1]:
                a[j],a[j+1]=a[j+1],a[j]
    return a
a=[3,2,1,4]
print(cho(a))

'''
过程分析:
3 2 1 4(a[0]和a[1]换)
2 3 1 4(a[1]和a[2]换)
2 1 3 4(a[2]和a[3]换)
2 1 3 4(a[0]和a[1]换)
1 2 3 4

插入排序

#coding:utf-8
#插入排序:每次取一个数,都要与它左边的数比,小的话就放左边,交换位置
def ins(a):
    for i in range(1,len(a)):
        t=a[i]
        j=i-1
        while(j>=0 and a[j]>t):
            a[j+1]=a[j]
            a[j]=t
            j=j-1
    return a
a=[3,2,1,4]
print(ins(a))

'''
分析过程:
3 2 1 4

i=1,j=0    2 3 1 4 
i=2,j=1    2 1 3 4     a[2]=1
j=0        1 2 3 4
i=3,j=2
不执行循环
'''

快速排序

#快速排序
def fast_sort(a):
    if len(a)<=1:
        return a
    else:
    #找基准数,也可以是第一个数,或者最后一个数,把比基准数小的放到左边,大的放右边,然后左右两边的再递归排序
        mid=a[len(a)//2]
        left,right=[],[]
        a.remove(mid)
        for num in a:
            if num in a:
                if num>=mid:
                    right.append(num)
                else:
                    left.append(num)
        return fast_sort(left)+[mid]+fast_sort(right)
a=[1,4,3,5,0,7]
print(fast_sort(a))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值