输入
输入包含三行:
第一行是数组元素个数n(1 < n < 20)。
第二行是数组n个元素,相邻两项之间用一个空格隔开。
第三行是待插入的元素x。
输出
输出插入后数组的所有元素,相邻两项之间用一个空格隔开。
输入示例
5
1 3 5 7 9
2
输出示例
1 2 3 5 7 9
数据范围
输入输出均为int范围的整数
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,i,j,x;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
} //基础部分,即输入数组和定义变量
scanf("%d",&x); //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
if(x>=a[n-1]){ //下面是排序部分(其实也不是排序,因为题中给的就是排好的)
for(j=0;j<n;j++){ //此部分主要是想办法找到插入数据与已排好顺序的数组中的关系
printf("%d ",a[j]); //
} //←←←←←←←←←←若x比最后一位数都小大,则直接先打印数组,再打印x
printf("%d",x);
}
else if(x<=a[0]){ //←←←←←若x比第一位数都小,则直接先打印x,再打印数组
printf("%d ",x);
for(j=0;j<n;j++){
printf("%d ",a[j]);
}
}
else{
for(j=0;j<n;j++){ //第三种情况就是在这些值中间
if(x>a[j]&&x<a[j+1]){ //也有可能相等的情况出现,所以既要比前一位大,又要比后
printf("%d ",a[j]); //一位小,才满足条件,然后先打印前一位(否则会丢失)再打
printf("%d ",x); //印比前一位a[j]大的x
}
else{
printf("%d ",a[j]); //若不满足条件,则继续打印该有序数组
}
}
}
return 0;
}
此题其实不需要排序,因为题中给出的已经为有序数组,正如题目所说 “插入”,而并不是再排一遍,所以直接找出插入值与数组个元素关系即可
无非三种情况:1.插在开头 2.插在结尾 3.插在中间
然后根据此3种情况设置判断条件来控制输出即可(先打印插入值or先打印数组值)