C语言_数组_直接插入排序

4 篇文章 0 订阅
4 篇文章 0 订阅

(只是一个数组题目罢了)

直接插入排序,是指将无序序列中的各元素依次插入到已经有序的数组中。

假设数组中前i-1元素已经有序,现在要将线性表中第i个元素插入到前面的有序子表中,插入过程如下:

以长度为n=8的序列(13,6,1,31,9,27,5,11)的插入排序过程做示范: 第1趟:将数组第2个元素6向前插入后,则数组中元素为(6,13,1,31,9,27,5,11); 第2趟:将数组第3个元素1向前插入后,则数组中元素为(1,6,13,31,9,27,5,11); 第3趟:将数组第4个元素31向前插入后,则数组中元素为(1,6,13,31,9,27,5,11); …… 第7趟:将数组第8个元素11向前插入后,则数组中元素为(1,5,6,9,11,13,27,31); 总之,共执行7趟操作,可将有n=8个元素的数组排成有序序列。

插入排序从第二个数开始,拿出第二个数向前进行插入排序,一直到最后一个数向前做插入排序,要求输出每趟插入排序的结果。

测试输入

10

47 47 21 69 2 8 76 50 9 47

预期输出:

47 47 21 69 2 8 76 50 9 47

21 47 47 69 2 8 76 50 9 47

21 47 47 69 2 8 76 50 9 47

2 21 47 47 69 8 76 50 9 47

2 8 21 47 47 69 76 50 9 47

2 8 21 47 47 69 76 50 9 47

2 8 21 47 47 50 69 76 9 47

2 8 9 21 47 47 50 69 76 47

2 8 9 21 47 47 47 50 69 76

提示: 如果有10个整数,要求输出每趟插入排序共9趟的结果。

这里我调用了自定义函数来实现程序,真正编写时可以不用函数。具体怎么做,就请读者自己思考啦。

编写程序:

#include<stdio.h>
#define N 100
int ONE (int a[],int n)
{
	int i,m;
	for (m=2;m<n+1;m++)
	{
		a[0]=a[m];
		for(i=m-1;i>=1;i--)
		{
			if (a[0]<a[i])
				a[i+1]=a[i];
			else break;
		}
		a[i+1]=a[0];
		for(i=1;i<=n;i++)
			printf("%d ",a[i]);
		printf("\n");
	}
	
}
int main()
{
	int a[N],n,i;
	scanf ("%d",&n);
	for (i=1;i<=n;i++)
		scanf ("%d",&a[i]);
	printf ("\n"); 
	ONE(a,n);
	return 0;
}

运行结果:


 运行成功!

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值