排序方式 | 时间复杂度 | 空间复杂度 | 稳定性 | ||
平均 | 最坏 | 最好 | |||
冒泡排序 | O(n^2) | O(n^2) | O(n) | O(1) | 稳定 |
快速排序 | O(nlogn) | O(n^2) | O(nlogn) | O(logn) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
排序方式稳定性:若存在相同的值,使用某种方式排序后,这些相同的值的相对位置不变,则称该方式是稳定的,反之则是不稳定的。
快速排序原理:选定一个值为基准值(可在这组数据中随机选取),一个指针从右至左扫描,指向数据比基准值小时停止,另一个指针从左至右扫描,指向数据比基准值大时停止,交换俩数据后继续扫描,当两个指针指向相同位置时,调整基准值位置。基准值左右两个数组按相同方式再排序。
归并排序原理:递归分治,当规模减小到每个数组只有一个值之后开始合并,两个数组从左至右扫描,按从小到大的顺序添加到一个新的数组中。
堆排序(以大根堆为例):
1.调整:比较根节点及其两个子节点大小,将最大值放到根节点
2.创建大根堆:对每一个非叶子节点进行一次调整
3.堆排序:将根节点与最后一个叶子节点交换,对根节点进行调整,调整后对被交换的子节点进行调整,重复操作直至调整完毕。将最后一个叶子节点排除在外(即,将堆的大小减一后),重复上述操作。