编写程序将一个给定的整数插到原本有序的整数序列
任务描述
本关任务:编写程序有 n( n<=100 )个整数,已经按照从小到大顺序排列好,现在另外输入一个整数 m,请将该数插入到序列中,并使新的序列仍然有序。
相关知识
为了完成本关任务,你需要掌握在长度为 n 的有序数组 a 中插入一个整数 x 后数组 a 仍然有序的算法思想:
从数组最后一个元素起,将要插入的数据 x 与数组 a 最后一个元素 a[n-1] 比较,如果小,就把 a[n-1] 向后移动一位到 a[n] 中;如果大,就跳出循环;
再依次与 a[n-2] 比较,如果小,就把 a[n-2] 向后移动一位到 a[n-1] 中;如果大,就跳出循环;直到 a[0] 为止;
跳出循环后,将 x 插入到数组下标 j+1 处。
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main() {
int n, i, j, x;
int a[N];
// 读取非负整数N
scanf("%d", &n);
// 读取N个有序整数
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 读取要插入的整数X
scanf("%d", &x);
// 从后向前查找插入位置
for (j = n - 1; j >= 0 && x < a[j]; j--) {
a[j + 1] = a[j]; // 后移
}
// 插入数据到正确位置
a[j + 1] = x;
// 输出新的有序序列
for (i = 0; i <= n; i++) {
printf("%d ", a[i]);
}
return 0;
}