C语言学习-菜鸟教程C经典100例-练习39
题目
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
思路
- 从前往后遍历,找到第一个满足插入条件的位置;
- 从数组末尾开始,将插入位置后的元素都向后移动一位;
- 在新位置插入元素;
- 更新数组大小
代码
c
#include <stdio.h>
#define MAX_SIZE 100
int main(){
int arr[MAX_SIZE];
int n; // 当前数组元素个数
int new_num; // 要插入的数
// 输入已排序的数组
printf("请输入已排序的数组元素个数(不超过%d):", MAX_SIZE - 1);
scanf("%d", &n);
// 判断数组范围有效
if(n <= 0 || n >= MAX_SIZE){
printf("输入的数组大小不合法!\n");
return 1;
}
// 输入数组元素
printf("请输入%d个已排序的整数(从小到大):\n", n);
for(int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
// 判断数组是否已排序
for(int i=1; i<n; i++){
if(arr[i] < arr[i-1]){
printf("输入的数组未按升序排序!\n");
return 1;
}
}
// 输入要插入的数
printf("请输入要插入的整数:");
scanf("%d", &new_num);
// 原始数组
printf("插入前的原始数组:\n");
for(int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
// 找到插入位置
int pos = n; // 默认插入到数组末尾
for(int i=0; i<n; i++){
if(new_num < arr[i]){
pos = i;
break;
}
}
// 后移元素
for(int i=n; i>pos; i--){
arr[i] = arr[i-1];
}
// 插入新元素
arr[pos] = new_num;
n++; // 更新数组大小
printf("\n插入后的数组:\n");
for(int i=0; i<n; i++){
printf("%d ", arr[i]);
}
printf("\n");
printf("插入位置:第%d个元素\n", pos+1);
return 0;
}
输出结果
c
请输入已排序的数组元素个数(不超过99):10
请输入10个已排序的整数(从小到大):
1 4 6 9 13 16 19 28 40 100
请输入要插入的整数:10
插入前的原始数组:
1 4 6 9 13 16 19 28 40 100
插入后的数组:
1 4 6 9 10 13 16 19 28 40 100
插入位置:第5个元素