【浅谈插入排序】

浅谈插入排序

插入排序,是把无序数列中的数一个个插入到有序数列中,直到无序数列没有数为止。

比如有这么一个数列: 2 4 6 1 3 5 14 2 0 10
一共有10个数,我们可以把第一个数当做有序区,剩下的数认为是在无序区; 接下来就是把无序区的数一个个插入到有序区。

怎么插入呢?
我们可以从“4”开始,先判断有序区的第一个数(这里是“2”)是否比“4”大;如果比“4”大,那就把这个数往后移动;
然后在判断这个数(“2”)原本位置的前一个数是否比“4”大(上面的数列有序区只有一个数,所以不用再往前遍历了),如果比4大,那就往后移动;依此类推,当 前一个数比“4”小或等于“4”,那就停止遍历;然后把“4”插入到最后一个往后移动的数原来的位置,这样就完成了一个数的插入。接下来循环此操作直到无序区没有数为止。

代码示例

这里只贴出算法有关代码

void insert_sort(int *array, int len)
{
	//有序区一开始只有一个数,循环len-1次即可插入len-1个数到有序区,然后无序区没有数了,从而完成排序
	for(int i = 1; i < len; i++)	
	{
		int j = i - 1;
		int ret = array[i];		//从下标为1的数开始进行插入操作

		while(j >= 0)
		{
			if(array[j] > ret)
			{
				array[j+1] = array[j];	//有序区被用来比较的这个数往后移动
				j--;	//还得看看前面一个数是否比ret大
			}
			else
			{
				break;
			}
		}
		array[j+1] = ret;	//一轮下来确定了ret要插入的位置,插入即可
	}	
}

调试结果

分别打印出从小到大排序和从大到小排序的结果

zzc@zzc-virtual-machine:~/share$ ./1
排序之前,数组为:39	48	29	16	48	40	37	19	33	33	
排序之后,数组变为:16	19	29	33	33	37	39	40	48	48

zzc@zzc-virtual-machine:~/share$ ./1
排序之前,数组为:19	40	4	40	16	20	5	21	6	17	
排序之后,数组变为:40	40	21	20	19	17	16	6	5	4

附录

sd

总结

以上介绍了插入排序的原理,也进行了代码实现和调试。
好记性不如烂笔头,以后忘记了再回来看看。
知行合一乃终点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值