《经典排序算法-插入排序》

内部排序:整个排序工作可在主存中完成。
外部排序:不能再主存中完成而必须在磁盘上完成的排序。

排序算法的下界:
通过计算排列中平均逆序数而得出插入排序平均运行时间的精确的界。
定理1—N个互异的的数组的平均逆序数是N(N-1)/4。
定理2—通过交换相邻元素进行排序的任何算法平均需要Ω(N^2)时间。

插入排序
算法:插入排序有N-1趟排序组成,对于P=1趟到P=N-1趟,插入排序保证从位置0到位置P-1的元素为已排序状态。
在这里插入图片描述
代码:

void InsertionSort(ElementType A[ ],int N)
{
	int j,P;
	Element Type temp;
	for(P=1;P<N;P++)
	{
	Tmp=A[P];
	for(j=p;j>0&&A[j-1]>tmp;j--)
		A[j]=A[j-1];
	A[j]=tmp;
}
}

插入排序的分析:
由于嵌套循环的每个都花费N次迭代,因此插入排序为O(N^2),而且这个界是精确的,因为以反序输入可以达到该界。精确计算所有的P值,第四行的测试最多执行P+1次,对所有的P求和,得到总数为:
在这里插入图片描述
如果输入数据已预先排序,那么运行时间为O(N),因为内层for循环的检测总是立即执行不成立而终止。所以如果插入排序输入几乎被排序,程序将运行地更快,插入排序的平均情形是O(N^2).

参考书籍:数据结构和算法分析-C语言描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值