插入排序(直接插入排序、折半插入排序、希尔排序)的性能分析

目录

前言

插入排序

直接插入排序性能分析

折半插入排序性能分析

希尔排序性能分析


前言

本篇文章主要是总结插入排序的性能分析,具体的概念、算法、排序过程,我前面的文章有写,在这里就不再过多赘述了。

插入排序

插入排序是一种简单直观的排序算法,其基本思想是每次将一个待排序的记录按其关键字大小插入前面已排好序的子序列,直到全部记录插入完成。

由插入排序的思想可以引申出三个重要的排序算法:直接插入排序、折半插入排序和希尔排序

直接插入排序性能分析

直接插入排序算法的性能分析如下:

空间效率:仅使用了常数个辅助单元,因而空间复杂度为O(1)


时间效率:在排序过程中,向有序子表中逐个地插入元素的操作进行了n-1趟,

  • 每趟操作都分为比较关键字和移动元素,而比较次数和移动次数取决于待排序表的初始状态。
  • 在最好情况下,表中元素已经有序,此时每插入一个元素,都只需比较一次而不用移动元素,因而时间复杂度为 O(n)。
  • 在最坏情况下,表中元素顺序刚好与排序结果中的元素顺序相反(逆序),总的比较次数达到最大,总的移动次数也达到最大,总的时间复杂度为O(n²)。
  • 平均情况下,考虑待排序表中元素是随机的,此时可以取上述最好与最坏情况的平均值作为平均情况下的时间复杂度,总的比较次数与总的移动次数均约为n²/4。
  • 因此,直接插入排序算法的时间复杂度为 O(n²)

稳定性:因为每次插入元素时总是从后往前先比较再移动,所以不会出现相同元素相对位置发生变化的情况,即直接插入排序是一个稳定的排序算法。


适用性直接插入排序适用于顺序存储和链式存储的线性表,采用链式存储时无须移动元素

折半插入排序性能分析

折半插入排序算法的性能分析如下:

空间效率:在排序过程中只需要额外使用常数级别的额外空间,不随待排序数组的大小而变化,所以空间复杂度为O(1)。


时间效率:折半插入排序仅减少了比较元素的次数,该比较次数与待排序表的初始状态无关,仅取决于表中的元素个数n;

而元素的移动次数并未改变它依赖于待排序表的初始状态。

因此,折半插入排序的时间复杂度仍为 O(n²),但对于数据量不很大的排序表,折半插入排序往往能表现出很好的性能。


稳定性:折半插入排序是一种稳定的排序算法。


适用性:折半插入排序仅适用于顺序存储的线性表

希尔排序性能分析

希尔排序算法的性能分析如下:

空间效率:仅使用了常数个辅助单元,因而空间复杂度为O(1)


时间效率:因为希尔排序的时间复杂度依赖于增量序列的函数,这涉及数学上尚未解决的难题,所以其时间复杂度分析比较困难。

  • 当n在某个特定范围时,希尔排序的时间复杂度约为O(n^{1.3})
  • 在最坏情况下希尔排序的时间复杂度为O(n²)。

稳定性:当相同关键字的记录被划分到不同的子表时,可能会改变它们之间的相对次序,因此希尔排序是一种不稳定的排序算法。


适用性希尔排序仅适用于顺序存储的线性表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心碎烤肠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值