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

C语言8种基本排序算法之插入排序

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

C语言8种基本排序算法之插入排序

小白一天学一个算法系列,从逻辑、关键、算法动画、完整示例代码四个方面进行学习。

(注:冒泡排序示例代码有更详细的注解,共用代码后续算法示例代码中不再注释。)

逻辑:待插入数和有序数列的数依次比较,符合条件时有序数后移,插入值填写到空出的位置。外层控制插入值进入,内层控制有序数后移。

关键:内外层结合的关键点是j=i-1,j--,从待插入值的相邻位开始向前依次比较大小。

动画:

代码:

#include 
#include 
#include 

#define N 10

//插入排序
void sort_insert(int *arr)
{
	int i,j,InsertVal;
	//开始时,最前面的两个数比较
	for (i = 1; i < N; i++)	//外层控制要插入的值进入
	{
		InsertVal=arr[i];	//保存待插入值,循环比较
		for(j=i-1;j>=0&&arr[j]>InsertVal;j--)	//内层控制已插入的值后移
		{
			arr[j+1]=arr[j];	//先判断后执行,注意j=j-1是在执行之后的
		}
		arr[j+1]=InsertVal;		//循环结束后即确定了要插入的位置,填入插入值
	}
}

//打印数组
void sort_inser_print(int *arr)
{
	int i;
	for (i = 0; i < N; i++)
	{
		//putchar(arr[i]);
		printf("%3d",arr[i]);
	}
	printf("n");
}

int main()
{
	
	//int res_rand;
	int i;
	int a[N];
	srand((unsigned int)time(NULL));	//srand播种
	//res_rand=rand()%100;	//rand生成

	printf("随机数生成:");
	for (i = 0; i < N; i++)
	{
		a[i]=rand()%100;
	}
	sort_inser_print(a);

	//调用插入排序
	sort_insert(a);
	printf("插入排序结果:");
	sort_inser_print(a);
	system("pause");
	return 0;
}

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

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

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