直插排序2020.11.10

思想:对顺序表或一维数组进行直接插入排序。把无序序列的一个关键字作为有序序列,从之后的无序序列一次插入到有序序列当中,将待插关键字与有序序列从后往前依次比较,若比有序序列第j个关键字小,则将第j个及其以后的关键字后移,将待插关键字插入到第j个位置,直到无序序列中所有关键字都已插入,排序结束。

直插、折半、希尔都是插入类排序,该类排序特点是在未完成一趟排序之前,所有的关键字均未到达最终为位置。

性能分析:最坏情况下 逆序 执行次数n*(n-1)/2次 时间复杂度为O(n²); 最坏情况下 有序 执行次数 n-1次 时间复杂度O(n) 空间复杂度常量级O(1)

	void InsertSort(int A[],int n)
{	
	int i,j,temp;
	for(i=1;i<n;++i)  //从数组第二个元素开始,第一个元素默认有序
	{
		temp=A[i];
		j=i-1;
		while(j>=0&&temp<A[j])
		{
			A[j+1]=A[j];  // 下标为j及以后的元素后移
			--j;
		}
		A[j+1]=temp; //插入关键字(注意是j+1,循环体多减了1)
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值