2022/11/9 在已排序好的数列中插入一个数字,使其保持原有的顺序排序

原有数组从大到小排序:

先给出思路:让插入的数依次与数列中的数比较,直到小于这一个数,此时,就可以从原数列的最后一项开始全部往后推一位,直到比较的这项,最后将要插入的数插进去即可。

代码如下: 

先对原数列进行排序,这里可用选择法

#include<stdio.h>
int main()
{
	int i, j, a[11], t;
	printf("enter 10 new numbers:");
	for (i = 0; i < 10; i++)
	{
		scanf_s("%d", &a[i]);
	}
	for (i = 0; i < 9; i++)
	{
		for (j = i+1; j < 10; j++)
		{
			if (a[i] < a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
	printf("原数组的排序为:\n");
	for (i = 0; i < 10; i++)
		printf("%-4d", a[i]);

}

 也可以使用气泡法:

#include<stdio.h>
int main()
{
	//数组的气泡法
	int i, j, a[11], t;
	printf("enter 10 new numbers:");
	for (i = 0; i < 10; i++)
		scanf_s("%d", &a[i]);
	for (j = 0; j < 9; j++)
	{
		for (i = 0; i < 9 - j; i++)
		{
			if (a[i] < a[i + 1])
			{
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
	printf("原有数列的顺序为:\n");
	for (i = 0; i < 10; i++)
		printf("%-4d", a[i]);
}

接下来插入一个数字即可:

printf("\nenter a new number:\n");
	scanf_s("%d", &t);
	for (i = 0; i < 10; i++)
	{
		if (t < a[9])
			a[10] = t;
		else 
			if (t > a[i])
			{
				j = 9;
				while (j >= i)
				{
					a[j+ 1] = a[j];
					j--;
				}
				a[i] = t;
				break;//跳出循环
			}
	}
	for (i = 0; i < 11; i++)
		printf("%-4d", a[i]);
	return 0;
}

完整代码如下:

#include<stdio.h>
int main()
{
	//数组的气泡法
	int i, j, a[11], t;
	printf("enter 10 new numbers:");
	for (i = 0; i < 10; i++)
		scanf_s("%d", &a[i]);
	for (j = 0; j < 9; j++)
	{
		for (i = 0; i < 9 - j; i++)
		{
			if (a[i] < a[i + 1])
			{
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
	printf("原有数列的顺序为:\n");
	for (i = 0; i < 10; i++)
		printf("%-4d", a[i]);
	printf("\nenter a new number:\n");
	scanf_s("%d", &t);
	for (i = 0; i < 10; i++)
	{
		if (t < a[9])
			a[10] = t;
		else 
			if (t > a[i])
			{
				j = 9;
				while (j >= i)
				{
					a[j+ 1] = a[j];
					j--;
				}
				a[i] = t;
				break;//跳出循环
			}
	}
	for (i = 0; i < 11; i++)
		printf("%-4d", a[i]);
	return 0;
}

结果:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值