0、交换排序
基本思想 : 两两比较元素,发现倒序即交换
两种基本的实现算法:
- 冒泡排序
- 快速排序
1、冒泡排序
基本思想 :从表的某一端开始,逐个比较相邻的两个元素,发现倒序即交换。
[标注] 这里的叙述都是从后往前逐个比较,相邻两个倒序就交换形如”冒泡泡”,故称为冒泡排序。
语言很苍白,用图例来解决
对序列 Arr[] ={18, 6, 2, 8, 6}进行冒泡排序演示
上面图例,两两之间比较需要交换的我画出来了,没交换的省略。
[注] 上面的序列是无序的,进行了多次两两之间的交换,那么如果序列本身就是有序的,那么按照上面的从后往前做了无效的两两比较,效率较低,如何解决?
Solution : 设置一个”标记”就ok了
代码:
冒泡算法分析:(有标记位改进的冒泡)
1 . 时间复杂度: 受序列表初始状态影响
- 正序情况,比较元素的次数是 n-1 ,交换的次数为0, O(n)
- 逆序情况,比较和交换的此时为 n(n-1)/2 , O(n2)
- 一般情况,取平均值 , O(n2)
2 . 稳定性 : 稳定排序
3 . 空间性能 : 1个辅助空间
最后的大白话: