排序算法总结

排序算法是数据结构与算法中的一个重要部分,用于对一组数据按照特定顺序进行排列。常见的排序算法有很多,每种算法都有其独特的时间复杂度、空间复杂度和稳定性等特性。以下是一些常用的排序算法及其特点:

  1. 冒泡排序(Bubble Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:稳定。
    • 基本思想:通过重复遍历数组,比较相邻元素并交换它们的位置来实现排序。
  2. 选择排序(Selection Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:在未排序的部分中找到最小或最大的元素,将其放到已排序的部分的末尾。
  3. 插入排序(Insertion Sort)

    • 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:稳定。
    • 基本思想:从第二个元素开始,将每个元素插入到前面有序部分的适当位置。
  4. 希尔排序(Shell Sort)

    • 时间复杂度:平均情况下为 O(nlog⁡n)O(nlogn),最坏情况下为 O(n2)O(n2)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:通过分组处理,先对间隔较大的序列进行插入排序,再逐渐减小间隔,最终变为相邻元素的插入排序。
  5. 归并排序(Merge Sort)

    • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡n)O(nlogn)。
    • 空间复杂度: O(n)O(n)。
    • 稳定性:稳定。
    • 基本思想:采用分治策略,将数组分成两半递归地排序,然后合并两个已排序的部分。
  6. 快速排序(Quick Sort)

    • 时间复杂度:平均情况为 O(nlog⁡n)O(nlogn),最坏情况下为 O(n2)O(n2)。
    • 空间复杂度: O(log⁡n)O(logn)。
    • 稳定性:不稳定。
    • 基本思想:选择一个基准值,将数组分为左右两部分,左边部分小于基准值,右边部分大于基准值,然后递归地对左右两部分进行快速排序。
  7. 堆排序(Heap Sort)

    • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡n)O(nlogn)。
    • 空间复杂度: O(1)O(1)。
    • 稳定性:不稳定。
    • 基本思想:利用堆这种数据结构进行排序,首先将待排序的数组构建成一个大顶堆,然后将堆顶元素与最后一个元素交换位置,并调整剩余元素的堆,直到全部排好序。
  8. 计数排序(Counting Sort)

    • 时间复杂度: O(n+k)O(n+k),其中 kk 是最大值减去最小值加一。
    • 空间复杂度: O(k)O(k)。
    • 稳定性:稳定。
    • 基本思想:通过计数每个数值出现的次数来确定其最终位置。
  9. 桶排序(Bucket Sort)

    • 时间复杂度:平均情况为 O(n+k)O(n+k),其中 kk 是桶的数量。
    • 空间复杂度: O(k)O(k)。
    • 稳定性:稳定。
    • 基本思想:将待排序的数值分布到有限数量的桶中,然后分别对每个桶中的数值进行排序,最后合并各个桶中的数值。
  • 时间复杂度:平均情况和最坏情况均为 O(nlog⁡k)O(nlogk),其中 kk 是基数的最大位数。
  • 空间复杂度: O(n+k)O(n+k)。
  • 稳定性:稳定。
  • 基本思想:基于数字的每一位进行排序,从最低位到最高位依次进行处理。

这些排序算法各有优缺点,在实际应用中应根据具体需求选择合适的算法。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值