1. 冒泡排序 (Bubble Sort)
- 基本思想:依次比较相邻的两个元素,如果顺序错误就交换它们,一轮比较可以确保最大元素沉底。
- 特点:简单易懂,但对大规模数据排序效率较低(时间复杂度 O(n^2))。
2. 选择排序 (Selection Sort)
- 基本思想:每次从未排序的数据中选择最小(或最大)的元素放到已排序部分的末尾。
- 特点:简单,但效率也较低(时间复杂度 O(n^2)),不适用于大规模数据。
3. 插入排序 (Insertion Sort)
- 基本思想:类似于整理扑克牌,每次将一个待排序的元素插入到已排序数组的合适位置。
- 特点:对于小规模数据或基本有序的数据效率较高,但在大规模数据上性能一般(时间复杂度 O(n^2))。
4. 归并排序 (Merge Sort)
- 基本思想:采用分治法,将原始数组划分为较小的数组,排序后再合并成一个大的有序数组。
- 特点:稳定且效率较高(时间复杂度 O(n log n)),但需要额外的空间来存储中间结果。
5. 快速排序 (Quick Sort)
- 基本思想:选择一个基准值,将数组分成两部分,小于基准值的元素放在左边,大于基准值的元素放在右边,然后递归地对两部分进行排序。
- 特点:高效的排序算法之一,平均时间复杂度为 O(n log n),但最坏情况下可能达到 O(n^2)。
6. 堆排序 (Heap Sort)
- 基本思想:利用堆的数据结构,将待排序数组构建成最大堆(最小堆),依次取堆顶元素进行排序。
- 特点:稳定且效率较高(时间复杂度 O(n log n)),但相比快速排序,常数因子较大。
7. 计数排序 (Counting Sort)
- 基本思想:适用于数据范围不大的整数排序,统计每个元素出现的次数,然后进行排序。
- 特点:对于数据范围不大且比较集中的数据排序效率很高(时间复杂度为 O(n + k),k 表示数据范围)。
8. 桶排序 (Bucket Sort)
- 基本思想:将数据分到有限数量的桶里,对每个桶进行单独排序,然后合并。
- 特点:适用于数据均匀分布在范围内的排序,平均时间复杂度为 O(n + k),k 表示桶的个数。
9. 基数排序 (Radix Sort)
- 基本思想:按照低位先排序,然后收集;再按照高位排序,再收集,依次进行,直到最高位。
- 特点:适用于数字范围较小但位数较多的排序,时间复杂度为 O(n * k),k 表示最大的位数。
不稳定的排序:(快速选择一堆西瓜)
空间大的是(快,归,基)
快速排序逼格最高,空间最大,速度最快,都是nlog₂n
快速,堆,归并实现代码较多,速度最快
依靠元素连续下标存储的排序:堆和希尔
外部排序:归并
某一趟不能选出最终位置的有:希尔排序,插入(插入排序就像是打牌,后面的一张一张往前面移动)
某一趟能选出最终位置的有:选择,冒泡,堆,快速
交换排序:冒泡,快速