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
总结来看:
冒泡排序方法是最简单的一种方法,也是最原始的一种方法!