假设有N个数字需要排序,冒泡排序的思想是:
- 从第一个开始比较两个相邻的数,是否是小的在前大的在后,如果不是就swap,一直到最后一个;
- 这样完成一趟之后,可以保证的是第N个一定是这组数中最大的;
- 第二趟开始,我们只需要从第一个到第N-1个比较即可。以此类推。
一个小trick:
正常情况下,不管这组数据本身是否有序,Bubble_Sort都需要重复两个for循环才能结束;但是如果这组数据本身已经有序了,我们可以通过添加一个变量flag,让程序“知道”不需要继续排序了,从而提升效率。
- 最好情况:一开始就是顺序的,不需要额外排序,但是仍然要扫描一遍全部数据,
- 最坏情况:整个是逆序的,
- 冒泡排序的优势:
- 每次都是从上往下扫描,而且用一个
Swap
函数交换相邻两个元素的位置,不管是对数组还是链表都是 Acceptable 的; - 只有相邻元素严格大于的时候才会
Swap
,保证其稳定性。