python冒泡排序算法
冒泡排序
冒泡排序:暂且规定:排序好的顺序是从小到大。
顾名思义,冒泡冒泡,就像烧水一样,刚开始凉水的时候,看着很平静,
当烧到一定温度后,就会有小水泡从下边冒上来。
冒泡排序算法就是根据两两比较,如果这个数比和它比较的数大,那么他俩交换位置,
继续和下一个数比较,直到最后位置。
第一轮比较:
第一次比较:33和2比较, 交换位置:2,33,12,34,22,56,32,45,43
第二次比较:33和12比较,交换位置:2,12,33,34,22,56,32,45,43
第三次比较:33和34比较:位置不变
第四次比较:34和22比较:交换位置:2,12,33,22,34,56,32,45,43
第五次比较:34和56比较:位置不变
第六次比较:56和32比较:交换位置:2,12,33,22,34,32,56,45,43
第七次比较:56和45比较:交换位置:2,12,33,22,34,32,45,56,43
第八次比较:56和43比较:交换位置:2,12,33,22,34,32,45,43,56
第二轮比较:
重复第一轮的过程,还是从第一个开始,即2和12 比较。。。。
lst = [33,2,12,34,22,56,32,45,43] # 假如有如乱序列表
for i in range(len(lst)-1): # 有多少个数比较多少轮
print("============================")
print("第",(i+1),"轮:")
print("============================")
for j in range(len(lst)-i-1): # 已经冒泡的不再比较,即最后一轮只比较一次
if lst[j]>lst[j+1]: # 每次紧挨着的两个比较
lst[j],lst[j+1] = lst[j+1],lst[j] # 交换位置
print("第",(j+1),"次:",lst)
print("最后结果:",lst)
打印结果:
============================
第 1 轮:
============================
第 1 次: [2, 33, 12, 34, 22, 56, 32, 45, 43]
第 2 次: [2, 12, 33, 34, 22, 56, 32, 45, 43]
第 3 次: [2, 12, 33, 34, 22, 56, 32, 45, 43]
第 4 次: [2, 12, 33, 22, 34, 56, 32, 45, 43]
第 5 次: [2, 12, 33, 22, 34, 56, 32, 45, 43]
第 6 次: [2, 12, 33, 22, 34, 32, 56, 45, 43]
第 7 次: [2, 12, 33, 22, 34, 32, 45, 56, 43]
第 8 次: [2, 12, 33, 22, 34, 32, 45, 43, 56]
============================
第 2 轮:
============================
第 1 次: [2, 12, 33, 22, 34, 32, 45, 43, 56]
第 2 次: [2, 12, 33, 22, 34, 32, 45, 43, 56]
第 3 次: [2, 12, 22, 33, 34, 32, 45, 43, 56]
第 4 次: [2, 12, 22, 33, 34, 32, 45, 43, 56]
第 5 次: [2, 12, 22, 33, 32, 34, 45, 43, 56]
第 6 次: [2, 12, 22, 33, 32, 34, 45, 43, 56]
第 7 次: [2, 12, 22, 33, 32, 34, 43, 45, 56]
============================
第 3 轮:
============================
第 1 次: [2, 12, 22, 33, 32, 34, 43, 45, 56]
第 2 次: [2, 12, 22, 33, 32, 34, 43, 45, 56]
第 3 次: [2, 12, 22, 33, 32, 34, 43, 45, 56]
第 4 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 5 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 6 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
============================
第 4 轮:
============================
第 1 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 2 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 3 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 4 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 5 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
============================
第 5 轮:
============================
第 1 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 2 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 3 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 4 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
============================
第 6 轮:
============================
第 1 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 2 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 3 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
============================
第 7 轮:
============================
第 1 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
第 2 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
============================
第 8 轮:
============================
第 1 次: [2, 12, 22, 32, 33, 34, 43, 45, 56]
最后结果: [2, 12, 22, 32, 33, 34, 43, 45, 56]
其实可以看出来在第三轮第4次比较就已经成功排好序了,却还在往下比较,这就是冒泡排序,效率不高,但却是最简单的也是最好理解的排序算法,下一篇说快速排序,一种比较快的排序算法。