常见的排序算法可以根据其实现原理分为以下几类,每种算法都有其特定的应用场景和性能特点:
1. 比较排序(基于元素比较)
-
冒泡排序(Bubble Sort)
- 原理:通过相邻元素交换,逐步将最大值“冒泡”到数组末尾。
- 时间复杂度:平均和最坏情况 (O(n^2)),最好情况 (O(n))(已排序时)。
- 特点:简单但效率低,稳定排序。
-
选择排序(Selection Sort)
- 原理:每次选择最小元素放到已排序区间的末尾。
- 时间复杂度:始终 (O(n^2))。
- 特点:不稳定,适合小规模数据。
-
插入排序(Insertion Sort)
- 原理:逐个将元素插入已排序区间的正确位置。
- 时间复杂度:平均和最坏 (O(n^2)),最好 (O(n))(已排序时)。
- 特点:稳定,适合小规模或部分有序数据。
-
快速排序(Quick Sort)
- 原理:分治法,选择一个基准元素,将数组分为两部分递归排序。
- 时间复杂度:平均 (O(n \log n)),最坏 (O(n^2))(如已排序且基准选择不当)。
- 特点:高效且原地排序,不稳定,实际应用广泛。
-
归并排序(Merge Sort)
- 原理:分治法,将数组分为两半分别排序后合并。
- 时间复杂度:始终 (O(n \log n))。
- 特点:稳定,但需要额外空间,适合链表或外部排序。
-
堆排序(Heap Sort)
- 原理:利用堆结构(完全二叉树)实现选择排序。
- 时间复杂度:始终 (O(n \log n))。
- 特点:原地排序,不稳定,适合大数据量。
-
希尔排序(Shell Sort)
- 原理:改进的插入排序,通过分组逐步缩小间隔排序。
- 时间复杂度:(O(n \log n)) 到 (O(n^2)),取决于增量序列。
- 特点:不稳定,适合中等规模数据。
2. 非比较排序(基于元素分布特性)
-
计数排序(Counting Sort)
- 原理:统计元素出现次数,适用于整数且范围较小的情况。
- 时间复杂度:(O(n + k))((k) 为数据范围