任务描述
本关任务:编程实现:在一个有序的数组中插入一个新的数,使得数组的有序性不变。
相关知识
为了完成本关任务,你需要掌握: 1.如何定义和初始化一个有序数组; 2.如何在有序数组中插入一个新的数,数组依旧有序; 3.如何遍历数组。
一维数组的定义
一维数组定义的一般形式: 类型名 数组名[常量表达式]; 例如: int x[6]; 它表示定义了一个整型的一维数组,数组名为x,包含有6个元素,分别是x[0]、x[1]、x[2]、x[3]、x[4]、x[5],每个元素都可以用来存放一个整数,并且元素的下标是依次递增1。
一维数组的初始化
1.从键盘输入 for (j = 0; j<n; j++) // 输入10个数据 scanf("%d", &r[j]); 2.赋值语句初始化(详见教材),如: int arr[10]={10,20,30,40,50,60,70,80,90,100};
一维数组的遍历
通俗的理解,遍历数组就是:把数组中的元素都看一遍。
示例如下: for ( i=0; i<N; i++ ) printf("%d ",a[i]);
如何插入数后保持数组有序
新的数的位置有两种情况: (1)数据比所有的数都大,因此位置在当前的数组尾部; (2)数据在当前的所有数据之间。因此在算法中先将输入的数据和数组最后一个比较,如果大于,就插入数组尾部,如果小于,可以从后向前比较,也可以从前向后比较,找到位置后,将该位置后的数据依次后移一位,最后将数据放入。
编程要求
在有序数组中可以插入任意数,依旧有序
测试说明
平台会对你编写的代码进行测试: 如:原始数组元素整数序列: 10,20,30,40,50,60,70,80,90,100; 插入数:35后为: 10 20 30 35 40 50 60 70 80 90 100;
#include <stdio.h>
int main()
{
int a[11] = { 3,5,7,10,14,17,20,29,41,78 };
int number, end, temp1, temp2;
int i, j;
scanf("%d", &number);
end = a[9];
if (number >= end)
{
a[10] = number;
}
else
{
for (i = 0; i < 10; i++)
{
if (a[i] > number)
{
temp1 = a[i];
a[i] = number;
for (j = i + 1; j < 11; j++)
{
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break;
}
}
}
for (i = 0; i < 11; i++)
{
printf(" %d", a[i]);
}
return 0;
}