C语言经典题目——将一个数插入已排序好的数组中

<1>题目介绍

有一个已排好序的数组,要求输入一个数后,按原来的规律将他插入数组中,例如将3插入

1 ,2 ,4 ,7 ,8, 9 ,10 ,11, 13, 100中,得到1 ,2 ,3,4 ,7 ,8, 9 ,10 ,11, 13, 100

<2>思路分析

  • 将输入的数字一一和数组中的元素对比
  • 如果没有比他大的,就将他放在数组的最后一个位置
  • 如果他在数组中某两个数之间,就将大于它的数全部向后移动一位

<3>代码实现

int main()
{
	int arr[11] = { 1 ,2 ,4 ,7 ,8, 9 ,10 ,11, 13, 100 };
	int input = 0;
	scanf("%d",&input);
	int i,j;
	for (i = 0; i < 10; i++)
	{
		if (input >= arr[9])
		{
			arr[10] = input;
		}
		else 
		{
			 if (input<=arr[i])									
			 {
				 int tmp1 = arr[i];								
				 arr[i] = input;								
				 for (j = i + 1; j < 11; j++)
				 {
					 int tmp2 = arr[j];							
					 arr[j] = tmp1;							    
					 tmp1 = tmp2;								 
				 }
				 break;
			 }
		}
	}
	for (i = 0; i < 11; i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

上面代码的核心部分在于下面

if (input<=arr[i])							//假设这里的input = 3,则i = 2
{
	int tmp1 = arr[i];						//记录tmp1 = arr[2] = 4
	arr[i] = input;							//让arr[2] = input = 3
	for (j = i + 1; j < 11; j++)
	{
		int tmp2 = arr[j];					//记录tmp2 = arr[3] = 7
		arr[j] = tmp1;						//让arr[3] = tmp1 = arr[2] = 4
		tmp1 = tmp2;						//让tmp1 = tmp2 = arr[3] = 7
	}
	break;
}

我将input = 3作为演示过程写出来了,后面只需要执行完for循环就能将整个插入过程执行完毕

<4>结果展示

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值