C语言算法 直接插入排序

直接插入排序:
每次从无序表(原数组)中取出下一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后比较,把第三个数按大小插入到有序表中;推而广之,进行了(n-1)趟扫描以后就完成了整个排序过程
它是由两层嵌套循环组成的,外层循环标识并决定待比较的数值次数,内层循环为待比较数值确定其最终位置。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

#include <stdio.h>
void insort (int s[],int n)//自定义排序函数 insort 
{
	int i,j;
	for (i=2;i<=n;i++)
		{
			s[0]=s[i];//s[0] 做监视哨 每次 比较 为其赋值
			j=i-1;		//建立 循环变量i的副本 从右往左比较
			while (s[0] < s[j])
				{
					s[j+1]=s[j];
					j--;
				}
			s[j+1]=s[0];//在 确定好的位置 上插入 s[i]
		}
}
void main()
{
	int a[11];
	int i;
	printf("请输入 10 个数据:");
	for (i=0;i<10;i++)
		scanf("%d",&a[i]);
	printf("原始顺序是: ");
	for (i=0;i<10;i++)
		printf("%3d",a[i]);
	insort(a,10);//调用 自定义函数 insort()
	printf("\n插入数据排序后的顺序是:");
	for (i=0;i<10;i++)
		printf("%3d",a[i]);
	printf("\n"); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值