栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

简单C排序算法系列——Insertion Sort插入排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单C排序算法系列——Insertion Sort插入排序

前言:简单C语言排序算法,其他持续更新点击直达(1)冒泡排序算法(2)选择排序算法

简单C排序算法系列——Insertion Sort插入算法

Author: Nirvana Of Phoenixl Proverbs
For you:There is no doubt that good things will always come, and when it comes late, it can be a surprise.

代码后解析过程

#include

void insertion_sort(int arr[], int length)
{
	int i = 0;
	int j = 0;
	int temp = 0;
	for(i = 1; i
		temp = arr[i]; 	//(1)
		for(j = i; j>0&&arr[j-1]>temp; j--)  //(2)
		{
			arr[j] = arr[j-1];  //(3)
		} 		
		arr[j] = temp; //(4)
	}
}

int main()
{
	int arry[] = {32, 23, 54, 48, 78, 12, 10, 62, 5, 25};	
	int len = (int)sizeof(arry)/sizeof(*arry);
	int i;	
	
	insertion_sort(arry, len);
	for(i = 0; i < len; i++)
	{
		 
		printf(" %d",arry[i]);
	}
	return 0 ;	
}

通俗总结帮助理解:
  上述代码解析,注意从数组第二个元素开始排序,外循环根据数组长度来定。
  代码(1)中插入排序过程当中也是通过对比数字大小进行,将数组元素从后向前进行扫描满足条件就插入,此时会造成当前排序对比元素位置被替换成满足条件的元素,因此需要将目前未排序的元素的第一个元素保存起来;
  代码(2)两个数字进行对比满足j>0(数组下标不能未负值)逻辑与(&&)上当前数字的前一个数字比较(外循环递增,内循环递减保证,也就是体现从后向前),如果当前值比它的前一个值小,则满足条件执行(3)将执行arr[j] = arr[j-1]也就时用前一个值j-1(较大值)覆盖掉当前值j(较小值),此时当前值j已经被覆盖掉了,但是不能丢掉,因为还排序后面数字,这也就是为什么要保存当前值的原因(注意这里不是交换,交换得有中间变量,如果不保存就会丢失数据)
  代码(4),如果满足条件的情况下,则当位置的值变成较大的值,j递减到了当前值的前一个,用原来保存的值temp放到前一个位置达到换位的目的。如果条件不满足,则直接赋值即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号