<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>结果展示