<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>结果展示
今日推荐