常用排序算法时间空间复杂度以及稳定性总结

  1. 冒泡排序:

    • 独特特点:通过依次比较相邻的元素并交换,每一轮都将未排序部分的最大元素浮动到最右边。
    • 特点描述:简单易懂,适用于小规模数据或已基本有序的数据。
  2. 选择排序:

    • 独特特点:在未排序部分选择最小(或最大)元素,放置到已排序部分的末尾,循环执行直到整个数组有序。
    • 特点描述:不稳定排序,不适用于大规模数据,但是相对于冒泡排序,减少了元素交换次数。
  3. 插入排序:

    • 独特特点:将未排序的元素逐个插入到已排序部分的合适位置,直到整个数组有序。
    • 特点描述:对于基本有序的数据表现良好,实现简单,适用于小规模数据。
  4. 希尔排序:

    • 独特特点:是插入排序的一种改进版本,通过对间隔序列的插入排序,逐渐缩小间隔,最终完成排序。
    • 特点描述:相对于插入排序,希尔排序在大规模数据上有较好的性能,取决于间隔序列的选择。
  5. 归并排序:

    • 独特特点:采用分治策略,将数组逐步分为小块,然后合并这些小块以达到排序的目的。
    • 特点描述:稳定排序,适用于大规模数据,时间复杂度稳定在O(n log n)。
  6. 快速排序:

    • 独特特点:采用分治策略,通过选取一个基准值,将数组划分为两个子数组,然后递归地对子数组进行排序。
    • 特点描述:平均情况下性能较好,不稳定排序,适用于大规模数据。
  7. 堆排序:

    • 独特特点:通过建立最大堆(或最小堆),实现对整个数组的排序。
    • 特点描述:不稳定排序,相对于快速排序,对于数据的随机访问要求较低。
  8. 基数排序:

    • 独特特点:根据数字的位数,从低位到高位进行排序,每一轮都是一次稳定排序。
    • 特点描述:适用于整数或字符串等具有分布范围的数据,但可能不如其他算法在一般情况下高效。

值得一提的是:

快速排序在最坏情况下的时间复杂度是O(n^2)。这种最坏情况发生在以下两种情况:

  1. 已排序或逆序排序的数组: 如果输入数组已经是有序的或逆序的,而选择的基准值不是随机的,而是每次都选择数组的最大或最小元素作为基准值,那么每次划分都只能将一个元素放在其正确的位置上,导致递归树呈现单边扩展的形式,时间复杂度达到O(n^2)。

  2. 所有元素值相同的数组: 如果输入数组中的所有元素都相同,那么每次划分后得到的两个子数组大小相等,递归树呈现平衡的形式,但是在每一层递归中,只能将一个元素放在其正确位置上,因此时间复杂度仍然是O(n^2)。

为了避免最坏情况的发生,通常在实际应用中会采用一些优化策略,如随机选择基准值、三数取中法(选择左端、右端和中间位置的元素中间值作为基准值)等,以减少最坏情况的概率。在平均情况下,快速排序的时间复杂度为O(n log n),因此它在实践中通常表现良好。

  堆排序适合在大数据中找出最大或者最小的前一组数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值