算法成本模型

排序成本模型

在研究排序算法时,我们需要计算 比较交换 的数量,对于不交换元素的算法,计算访问数组的次数

选择排序

1、找到最小的,和第一个元素交换位置
2、然后找到第二小的,和第二个元素交换位置,如此反复,直到整个数组排序

比较次数交换次数
N 2 2 \frac{N^2}{2} 2N2 N N N

特点:

  • 运行时间和输入无关
  • 数据移动最少
插入排序
情况比较次数交换次数
平均 N 2 4 \frac{N^2}{4} 4N2 N 2 4 \frac{N^2}{4} 4N2
最坏 N 2 2 \frac{N^2}{2} 2N2 N 2 2 \frac{N^2}{2} 2N2
最好 N − 1 N - 1 N10

特点:

  • 对部分有序且小规模的数组十分高效

对于随机排序的无重复主键的数组,插入排序和选择排序的运行时间是平方级别的,两者之比是一个较小的常数。1980年,插入排序比选择排序快1倍,现在仍然是这样

希尔排序

基于插入排序的快速的排序算法,它的思想是使数组中任意间隔为 h 的元素都是有序的 —— h 有序数组,h 个互相独立的有序数组编织在一起组成的一个数组。

希尔排序更高效的原因是它衡量了子数组的规模和有序性。排序之初,各个子数组都很短,排序之后子数组都是部分有序的,这两种情况都很适合插入排序。算法的性能不仅取决于h,还取决于h之间的数学性质。

在实际应用中,h 序列使用: h = 3 ∗ h + 1 h = 3* h + 1 h=3h+1 的递增序列基本就足够了。透彻理解希尔排序的性能至今仍然是一项挑战。

希尔排序比插入排序和选择排序都要快得多,而且数组越大,优势越大。已知在最快情况下,递增序列为 3 ∗ h + 1 3 * h + 1 3h+1的希尔排序的比较次数和 N 3 2 N^\frac{3}{2} N23 成正比

通过提升速度来解决其他方式无法解决的问题是研究算法的设计和性能的主要原因之一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值