十大经典排序算法
经典排序算法有很多,常见的包括比较类排序和非比较类排序两大类。以下是最具代表性的经典排序算法及其简要介绍:
🔢 比较类排序(基于元素比较,时间复杂度最差为 O(n²) 或 O(n log n))
1. 冒泡排序(Bubble Sort)
- 原理:相邻元素两两比较,大的往后“冒”。
- 时间复杂度:最坏 O(n²),最好 O(n)
- 空间复杂度:O(1)
- 是否稳定:✅ 稳定
- 详情:冒泡排序(Bubble Sort)
2. 选择排序(Selection Sort)
- 原理:每次选择最小(大)元素,放到已排序序列尾部。
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 是否稳定:❌ 不稳定
- 详情:选择排序(Selection Sort)
3. 插入排序(Insertion Sort)
- 原理:将当前元素插入到前面已排序部分的合适位置。
- 时间复杂度:最坏 O(n²),最好 O(n)
- 空间复杂度:O(1)
- 是否稳定:✅ 稳定
- 详情:插入排序(Insertion Sort)
4. 希尔排序(Shell Sort)
- 原理:分组插入排序,逐步缩小间隔。
- 时间复杂度:平均 O(n^1.3),具体取决于增量序列
- 空间复杂度:O(1)
- 是否稳定:❌ 不稳定
- 详情:希尔排序(Shell Sort)
5. 归并排序(Merge Sort)
- 原理:分治法,先递归分解,再合并有序数组。
- 时间复杂度:O(n log n)
- 空间复杂度:O(n)
- 是否稳定:✅ 稳定
- 详情:归并排序(Merge Sort)
6. 快速排序(Quick Sort)
- 原理:分治法,选定一个基准元素,划分左右两边递归排序。
- 时间复杂度:平均 O(n log n),最坏 O(n²)
- 空间复杂度:O(log n)
- 是否稳定:❌ 不稳定
- 详情:快速排序(Quick Sort)
7. 堆排序(Heap Sort)
- 原理:构造最大(或最小)堆,依次取顶元素。
- 时间复杂度:O(n log n)
- 空间复杂度:O(1)
- 是否稳定:❌ 不稳定
- 详情:堆排序(Heap Sort)
⚙️ 非比较类排序(基于元素特征,不是基于比较)
8. 计数排序(Counting Sort)
- 原理:统计每个数出现次数,适用于整数、范围小。
- 时间复杂度:O(n + k),k 是数值范围
- 空间复杂度:O(k)
- 是否稳定:✅ 稳定
- 详情:计数排序(Counting Sort)
9. 桶排序(Bucket Sort)
- 原理:将元素分到多个桶中,桶内排序。
- 时间复杂度:平均 O(n),最坏 O(n²)
- 空间复杂度:O(n + k)
- 是否稳定:✅ 稳定(若桶内排序稳定)
- 详情:桶排序(Bucket Sort)
10. 基数排序(Radix Sort)
- 原理:按位排序(最低位开始),适合整数或字符串。
- 时间复杂度:O(nk),k 为最大位数
- 空间复杂度:O(n + k)
- 是否稳定:✅ 稳定
- 详情:基数排序(Radix Sort)
🧠 按应用选择排序算法建议:
| 数据规模 | 数据特点 | 推荐算法 |
|---|---|---|
| 小规模 | 无明显特点 | 插入排序、冒泡排序 |
| 中等规模 | 稳定性要求高 | 归并排序 |
| 大规模 | 速度要求高 | 快速排序、堆排序 |
| 整数且范围小 | 非比较排序适用 | 计数、基数、桶排序 |
相关内容
- 冒泡排序(Bubble Sort) 冒泡排序是一种基础且易懂的排序算法,适合小规模数据排序。本文提供冒泡排序的算法原理与 JavaScript、Python、C++、Java、PHP、Go 多语言...
- 基数排序(Radix Sort) 基数排序是一种非比较类排序,适用于整数或定长字符串。本文介绍 LSD 方式的基数排序算法,提供 JavaScript、Python、C++、Java、PHP、G...
- 选择排序(Selection Sort) 选择排序是一种简单直观的排序算法,通过反复选择最小元素放到前面实现排序。本文讲解算法原理,并提供 JavaScript、Python、C++、Java、PHP、...
- 插入排序(Insertion Sort) 插入排序是一种简单且高效的排序算法,适合部分有序数组排序。本文介绍算法原理,并提供 JavaScript、Python、C++、Java、PHP、Go 多语言示...
- 希尔排序(Shell Sort) 介绍希尔排序的原理和分组插入策略,适用于中等规模数据。附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现代码,助你深入理解。
- 归并排序(Merge Sort) 介绍归并排序的分治法思想、稳定性特点和适用场景,附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现及详细解析,帮助深入理解。