1 题目
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
2 分析
对于一个有序的数组,要插入一个数,并保持依然有序,方法是从后往前比较,若插入的数小于比较的数,那么比较的数往后移,直至遇到插入的数大于比较的数为止,此时将该数插到此位置。
3 实现
#include <stdio.h>
void insert(int A[], int n, int x)
{
int i;
for (i = n - 1; i >= 0; i--) {
if (A[i] > x) {
A[i + 1] = A[i]; // 当比较的数比x大时,将其后移
} else {
break; // 确定出x要插入的位置
}
}
A[i + 1] = x; // 将x插入到数组中
}
int main(void)
{
int n = 8; // 初始数组大小为8
int x = 5; // 要插入的数为5
int A[20] = {1, 2, 3, 4, 6, 7, 8, 9};
insert(A, n, x);
for (int i = 0; i < n + 1; i++) {
printf("%d ", A[i]);
}
return 0;
}
4 运行结果
1 2 3 4 5 6 7 8 9