在学习算法的时候,最先接触的就是排序算法。排序算法是一种将无序的数组按照大小顺序排列起来的一种算法。一个好的算法效率可以比基本算法高很多。本文主要讨论了交换排序,选择排序,插入排序,归并排序,分布排序这五大类。下面给出一个表格,列举了一些常用的排序算法:
分类 |
排序算法 |
插入排序 |
直接插入排序,希尔排序,二叉树排序 |
交换排序 |
冒泡排序,鸡尾酒排序,奇偶排序,快速排序 |
选择排序 |
选择排序,堆排序 |
归并排序 |
归并排序 |
分布排序 |
基数排序,计数排序,插值排序 |
排序算法就稳定性而言,分为稳定和不稳定,主要的依据为是否会改变等值的顺序,当数组中存在相等值的时候,稳定算法不会改变它的顺序,不稳定算法可能会改变相等值得顺序。冒泡排序,鸡尾酒排序,奇偶排序,直接插入排序,计算排序,基数排序,归并排序和二叉树排序都是稳定排序,快速排序,希尔排序,选择排序,堆排序都是不稳定排序。
常见排序的平均时间复杂度由高到低为:
- 冒泡排序 O(n2)
- 插入排序 O(n2)
- 选择排序 O(n2)
- 归并排序 O(n log n)
- 堆排序 O(n log n)
- 快速排序 O(n log n)
- 希尔排序 O(n1.25)
- 基数排序 O(n)