浅谈插入排序

浅谈插入排序

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

比如有这么一个数列: 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(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

总结

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

posted @   李星云姬如雪  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示