冒泡排序算法的工作原理如下:
1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3. 除了最后一个,所有的元素重复以上的步骤。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
例子图步骤如下:
冒泡排序代码实现:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "hsz" def bubble_sort(alist): # 外层循环控制比较几轮 n = len(alist) for j in range(n - 1): # 内存循环控制交换 # -j是不再换已经排好的 for i in range(n - 1 - j): # 若前一个比后一个大,则换 if alist[i] > alist[i + 1]: alist[i], alist[i + 1] = alist[i + 1], alist[i] # print(li) if __name__ == '__main__': li = [33, 11, 26, 78, 3, 9, 40] print("原来的列表:", li) bubble_sort(li) print("排序后的列表:", li)
调优后的冒泡算法实现:
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "hsz" # 调优后的冒泡排序 def bubble_sort(alist): # 外层循环控制比较几轮 n = len(alist) for j in range(n - 1): # 定义计数器 count = 0 # 内存循环控制交换 # -j是不再换已经排好的 for i in range(n - 1 - j): # 若前一个比后一个大,则换 if alist[i] > alist[i + 1]: alist[i], alist[i + 1] = alist[i + 1], alist[i] # 计数器 count += 1 if count == 0: return if __name__ == '__main__': li = [33, 11, 26, 78, 3, 9, 40] print("原来的列表:", li) bubble_sort(li) print("排序后的列表:", li)