python排序方法,冒泡排序法代码实现

1. Python自带的对列表排序的方法:sort(), sorted(), reverse();

c=[6,5,4,3,2,1]
c.sort() #永久排序
c.reverse() #反转排序
print(sorted(c)) #sorted临时排序
print(c)

程序运行结果
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]

2. 冒泡排序(Bubble sort) -常见的快速排序算法

    非常好的理解冒泡排序的文章参考:http://bubkoo.com/2014/01/12/sort-algorithm/bubble-sort/

    Python 脚本实现:

    算法过程:

    第一步:从第一个数开始,两两交换将最大的数往后移,第一次所有数字全部两两交换后,序列里最大的数字将会移到最后面;例子如下:


c=[6,5,4,3,2,1]#把序列c从小到大排序
"""第一步:每两个数两两交换,最终将最大的数字移到最后"""
for i in range(0,len(c)-1):
    if c[i]>c[i+1]:
        c[i],c[i+1]=c[i+1],c[i]
        print(c)
print(c)

程序运行结果:
[5, 6, 4, 3, 2, 1] #前两个数两两交换
[5, 4, 6, 3, 2, 1] #第2个第3个数两两交换
[5, 4, 3, 6, 2, 1] #第3个第4个数两两交换
[5, 4, 3, 2, 6, 1]
[5, 4, 3, 2, 1, 6] #最后两个数字两两交换
最终结果 [5, 4, 3, 2, 1, 6] #全部两两交换后最终结果

   第二步:最大的数字排到最后面后,将剩下的数字继续两两交换,从而将第二大的数字排到最后第二位;

c=[6,5,4,3,2,1]#把序列c从小到大排序
"""第一步:每两个数两两交换,最终将最大的数字移到最后"""
for i in range(0,len(c)-1):
    if c[i]>c[i+1]:
        c[i],c[i+1]=c[i+1],c[i]
"""第二步:每两个数两两交换,最终将第二大的数字移到最后第二个"""        
for i in range(0,len(c)-2):  #与第一步不同点在于少了一个数字,因此交换次数少了一次
    if c[i]>c[i+1]:
        c[i],c[i+1]=c[i+1],c[i]
print("最终结果",c)

程序运行结果:
最终结果 [4, 3, 2, 1, 5, 6]  #第二大的数字5排到了倒数第二位;

    第三步:将除了后两位之外剩下的数字继续交换,直到下一个最大的数字排到最后面...

    总结规律,全部数字两两交换算一个循环,每下一个循环减少交换的次数,代码总结如下:

c=[6,5,4,3,2,1]#从小到大排序
for j in range(len(c)-1,0,-1): #每次循环交换的次数依次缩小
    print(j)   #输出第几次循环
    for i in range(0,j):#每一次循环里的交换算法
        if c[i]>c[i+1]:
            c[i],c[i+1]=c[i+1],c[i] #见文章结尾注释1
        print(c) #输出每一步交换后的结果

程序运行结果为:
5        
[5, 6, 4, 3, 2, 1]
[5, 4, 6, 3, 2, 1]
[5, 4, 3, 6, 2, 1]
[5, 4, 3, 2, 6, 1]
[5, 4, 3, 2, 1, 6]
4
[4, 5, 3, 2, 1, 6]
[4, 3, 5, 2, 1, 6]
[4, 3, 2, 5, 1, 6]
[4, 3, 2, 1, 5, 6]
3
[3, 4, 2, 1, 5, 6]
[3, 2, 4, 1, 5, 6]
[3, 2, 1, 4, 5, 6]
2
[2, 3, 1, 4, 5, 6]
[2, 1, 3, 4, 5, 6]
1
[1, 2, 3, 4, 5, 6]       

注释1:Python里交换两个数值的快捷写法:a, b=b, a

a=3
b=4
a, b = b, a
print('a = ', a)
print('b = ', b)

程序运行结果
# a =  4
# b =  3

3.补充一下冒泡排序的多种代码实现方式???(与选择排序好像。。。。)

def bubbleListSort_method1(a):
    '''小的放前面,第一个数固定,与后面的比,相当于先浮出小泡????这个好像是选择排序。。。。'''
    for i in range(0,len(a)):
        for j in range(i+1,len(a)):
            if a[i]>a[j]:
                a[i],a[j]=a[j],a[i]
    return a

def bubbleListSort_method2(a):
    '''大的放后面,相当于先浮出大泡'''
    
    for i in range(0,len(a)-1):
        for j in range(0,len(a)-i-1):
            if a[j]>a[j+1]:
                a[j],a[j+1]=a[j+1],a[j]
    return a

总结来看:

冒泡排序方法是最简单的一种方法,也是最原始的一种方法!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值