冒泡排序的原理:
冒泡排序是将待排序的数组相邻两元素两两比较,如果符合排序的预期则这两个元素的相对位置保持不变;如果不符合排序的预期则交换这两个相邻元素的顺序。题眼在相邻上。以这样的方式进行排序通过两两的交换可以将端元素“挤”到最边上,就像泡泡浮出水面,因而起名为冒泡排序。
以如下所示数组为例:
[65, 12, 21, 3, 9, 1, 50, 33]
按照冒泡排序的思想,对于该数组进行排序的执行过程为(设排序结果为从小到大):
- 比较65与12的值,与预期逆序,则交换两元素的位置
- 顺延比较65与21的值,与预期逆序,交换二者的位置
- ...
- 65这个元素最终会像泡泡一样被浮到最右端,此时第0趟结束
- 周而复始进行这一过程,直至生成有序数组
Python代码实现:
import sys lists = [65, 12, 21, 3, 9, 1, 50, 33] #starting bubble sort count = len(lists) print count for i in range(0, count-1): for j in range(1, count-i): if lists[j] < lists[j-1]: lists[j-1], lists[j] = lists[j], lists[j-1] print lists
CR:
- range()函数的取值是左闭右开区间,需注意右边界的取值
- i运行全局是count-1(i的含义为周而复始的趟数,即count-1趟,范围为[0,count-2]),因为最后仅会剩下一个元素,数组已然有序,即使两两相比也不会交换任何元素的顺序。因而不再需要第count-1趟。
运行结果:
时间复杂度:O(N^2)