插入排序

插入排序:每一趟将一个待排序的元素,按其关键字的大小插入到已排序序列的适当位置,直到全部插入完成。

常见的插入排序有以下三种。

1、直接插入排序

1)过程:直接插入排序是一种最简单的排序方法,其过程就是依次将每个元素插入到一个有序的序列中去。不过它有个缺点,就是当我们的数据基本有序时,每次插入都要移动位置,此时的插入效率是很低的。为了解决这种情况,又产生了拆半插入排序,希尔排序。

工作原理:插入排序在实现上,从后面向前扫描(一开始从下标为1的元素开始,往下标为0的元素遍历),在扫描过程中,需要反复把已排序元素逐步向后挪位,为最新的元素提供插入位置。

void InsertionSort(int *a, int len)
{
	for (int j=1; j<len; j++)
	{
		int key = a[j];
		int i = j-1;
		while (i>=0 && a[i]>key)
		{
			a[i+1] = a[i];
			i--;
		}
		a[i+1] = key;
	}
}

 

2、希尔排序

1)过程:希尔排序又称缩小增量排序,基本思想:把元素按下标的一定增量d分组,对每组元素采用直接插入排序的方法进行排序,然后随着增量不断减小,直到d为1,整个数据合为一组有序序列。

自己理解:按一定增量为一组,此时49、13一组,38、27一组,65、49一组,对他们做插入排序,直到增量变为1 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值