常见排序算法时间、空间复杂度总结
常见排序算法时间、空间复杂度总结
- n:待排序元素数量。
- k:数据的范围或桶的数量。
- 稳定性:若两个元素相等,排序后顺序是否保持不变。
排序算法 | 最好时间复杂度 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 | 是否与初始状态有关 | 一趟能否确定最终位置 | 简要说明 |
---|---|---|---|---|---|---|---|---|
冒泡排序 | O(n) | O(n²) | O(n²) | O(1) | ✅ | ✅ | ✅ 最大值冒到末尾 | 初始有序时效率高 |
选择排序 | O(n²) | O(n²) | O(n²) | O(1) | ❌ | ❌ | ✅ 最小值放前面 | 每次都找最小值 |
插入排序 | O(n) | O(n²) | O(n²) | O(1) | ✅ | ✅ | ❌ 插入位置不唯一 | 初始越有序越快 |
希尔排序 | O(n log n) | 依增量而异 | O(n²) | O(1) | ❌ | ✅ | ❌ | 分组插入,效率不稳定 |
归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | ✅ | ❌ | ❌ | 稳定、适合链表或大数据 |
快速排序 | O(n log n) | O(n log n) | O(n²) | O(log n) | ❌ | ✅ | ✅ 基准元素归位 | 平均效率高,需优化枢轴 |
堆排序 | O(n log n) | O(n log n) | O(n log n) | O(1) | ❌ | ❌ | ✅ 最大值出堆 | 适合TopK和优先队列 |
计数排序 | O(n + k) | O(n + k) | O(n + k) | O(k) | ✅ | ❌ | ❌ | 非比较排序,整数范围适用 |
桶排序 | O(n + k) | O(n + k) | O(n²) | O(n + k) | ✅ | ✅ | ❌ | 分布均匀时非常高效 |
基数排序 | O(n × k) | O(n × k) | O(n × k) | O(n + k) | ✅ | ❌ | ❌ | 多位数排序,适合字符串或大数 |
小贴士:
- 需要稳定排序时推荐用:冒泡、插入、归并、计数、基数。
- 注重空间效率时推荐用:快速排序(递归可优化)、堆排序、插入排序。
- 排序速度优先、数据量大时推荐:快速排序、归并排序、堆排序。
是否与初始序列状态有关:
有关:冒泡、插入、快速、希尔、桶排序 —— 这些算法的运行效率会因初始序列的有序程度而显著不同;
无关:选择、归并、堆、计数、基数排序 —— 无论数据有序与否,都会按照固定流程进行,复杂度不会改善。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/233242.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!