文章目录
- 总览
- 冒泡排序
- 冒泡?
- 啥是冒泡排序
- 冒泡排序过程
- 算法实现
- 算法性能分析
- 稳定性
- 冒泡排序是否适用于链表
- 小结
总览
冒泡排序
冒泡?
自然界的冒泡
啥是冒泡排序
冒泡排序过程
此时序列要求递增的
首先比较27和49,发现符号递增序列,小的在左边
再比较13和27,此时小的依然在左边,符号
再比较76和13,此时小的在右边,交换
此时13已经交换到76的位置了,再比较97和13,小的在右边,交换
此时13交换到97的位置了,再比较65和13,小的在右边,交换
此时13交换到65的位置了,比较38和13,小的在右边,交换
此时13交换到38的位置了,比较49和13,小的在右边,交换
第一趟冒泡排序结果
开始第二趟,和之前步骤一样
此时不需要和之前冒泡出来的元素对比
第二趟结果
第三趟即后面都类似
每趟都会从剩下的没确定位置的找到最小的排到之前已确定位置的元素后面
注意第四趟如果有相等的比较则不交换,保证稳定性
注意在第五趟时候,此时没有交换,可以认为已经有序
算法实现
flag标记是否交换,如果没有交换则已经排序好了
总共n次循环,从0开始,每次循环
算法性能分析
有序的还需比对n次,都没交换才会得到这是有序的信息
最坏情况每次比对所比对的序列都是逆序的
交换元素一次需要比对元素三次
稳定性
稳定的,在相等时不做交换
冒泡排序是否适用于链表
也适用的
将当前链表指针与其后面的指针的元素比较,如果当前的大于后面的,那么就交换
此时49和后面的比较,不需要交换
此时69也不需要与后面的交换
97需要与后面的交换
还需要交换
依然需要交换
依然要交换
依然要交换
此时第一趟结束,然后继续这样从头开始