常见排序算法

常见的排序算法可以分为以下几类:

1. 比较排序

  • 冒泡排序(Bubble Sort)

    • 时间复杂度:O(n²)
    • 空间复杂度:O(1)
    • 原理:重复遍历数组,比较相邻元素并交换,直到没有需要交换的元素为止。
  • 选择排序(Selection Sort)

    • 时间复杂度:O(n²)
    • 空间复杂度:O(1)
    • 原理:每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
  • 插入排序(Insertion Sort)

    • 时间复杂度:O(n²)
    • 空间复杂度:O(1)
    • 原理:将未排序部分的元素逐个插入到已排序部分的正确位置。
  • 希尔排序(Shell Sort)

    • 时间复杂度:O(n log n) ~ O(n²)(取决于步长序列)
    • 空间复杂度:O(1)
    • 原理:改进的插入排序,通过将数组分成多个子序列进行排序,逐步缩小子序列的间隔。
  • 归并排序(Merge Sort)

    • 时间复杂度:O(n log n)
    • 空间复杂度:O(n)
    • 原理:分治法,将数组分成两半,分别排序后再合并。
  • 快速排序(Quick Sort)

    • 时间复杂度:O(n log n)(平均),O(n²)(最坏)
    • 空间复杂度:O(log n)(递归栈)
    • 原理:分治法,选择一个基准元素,将数组分为小于基准和大于基准的两部分,递归排序。
  • 堆排序(Heap Sort)

    • 时间复杂度:O(n log n)
    • 空间复杂度:O(1)
    • 原理:利用堆数据结构,将数组构建成最大堆(或最小堆),然后逐个取出堆顶元素。

2. 非比较排序

  • 计数排序(Counting Sort)

    • 时间复杂度:O(n + k)(k为数据范围)
    • 空间复杂度:O(k)
    • 原理:适用于整数排序,统计每个元素的出现次数,然后根据统计结果输出排序后的数组。
  • 桶排序(Bucket Sort)

    • 时间复杂度:O(n + k)(k为桶的数量)
    • 空间复杂度:O(n + k)
    • 原理:将元素分配到多个桶中,每个桶分别排序,最后合并。
  • 基数排序(Radix Sort)

    • 时间复杂度:O(n * k)(k为最大数字的位数)
    • 空间复杂度:O(n + k)
    • 原理:按位排序,从最低位到最高位依次进行排序。

3. 其他排序

  • TimSort
    • 时间复杂度:O(n log n)
    • 空间复杂度:O(n)
    • 原理:结合了归并排序和插入排序,广泛应用于Python和Java等语言的标准库中。

4. 稳定性

  • 稳定排序:相等元素的相对顺序在排序前后保持不变(如:冒泡排序、插入排序、归并排序、计数排序、基数排序)。
  • 不稳定排序:相等元素的相对顺序可能改变(如:选择排序、快速排序、堆排序)。

5. 适用场景

  • 小规模数据:插入排序、冒泡排序、选择排序。
  • 大规模数据:快速排序、归并排序、堆排序。
  • 特定场景:计数排序、基数排序适用于整数排序,桶排序适用于均匀分布的数据。

选择合适的排序算法取决于数据规模、数据分布、稳定性要求以及时间和空间复杂度的权衡。

相关推荐
南境十里·墨染春水21 分钟前
数据结构 —— 链表
数据结构·链表
为何创造硅基生物32 分钟前
C 语言 typedef 结构体私有化
c语言·开发语言·算法
yzx99101335 分钟前
递归算法入门:像俄罗斯套娃一样思考
人工智能·算法
心中有国也有家40 分钟前
从零上手 CANN 学习中心:像逛技术便利店一样学昇腾
学习·算法·开源
oo哦哦1 小时前
搜索矩阵系统的最短路密码:用Dijkstra算法和网络流理论,解释为什么你做了1000个关键词,流量还不如别人30个
网络·算法·矩阵
Matlab程序猿小助手1 小时前
【MATLAB源码-第319期】基于matlab的帝王蝶优化算法(MBO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·算法·matlab
图码1 小时前
二分查找进阶:如何在有序数组中快速找到Upper Bound?
数据结构·算法·面试·分类·柔性数组
试剂界的爱马仕1 小时前
《古董局·终局5:潮生》第 2 章:镜子的天赋
大数据·人工智能·算法
Cthy_hy1 小时前
树状数组(BIT)进阶:差分优化实现区间修改、区间查询
数据结构·python·算法
YsyaaabB2 小时前
ACM 模式通用代码模板
java·c++·python·算法