輸入 10 個已排序整數存入陣列 b,再輸入 5 個整數 x 依序插入並保持有序,最終輸出 15 個元素。
#include <stdio.h>
void input(int a[], int n) {
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
}
void insert(int a[], int n, int x) {
int i;
for (i = 0; i < n; i++)
if (x < a[i]) break; // 找到插入位置
// 從後向前移動元素騰出位置
for (int j = n; j > i; j--)
a[j] = a[j - 1];
a[i] = x;
}
void output(int a[], int n) {
for (int i = 0; i < n; i++) printf("%d ", a[i]);
printf("\n");
}
int main() {
int b[100], c[5];
input(b, 10);
input(c, 5);
for (int i = 0; i < 5; i++)
insert(b, 10 + i, c[i]); // 每次插入後有效長度 +1
output(b, 15);
return 0;
}
scanf("%d") 而非 %c 讀取整數。x < a[i](遞增序)。j = n; j > i; j-- 從後往前,避免覆蓋。10+i。
輸入 b: 1 3 5 7 9 11 13 15 17 19
輸入 c: 2 4 6 8 10
輸出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
有序陣列插入核心:二分查找定位(或線性掃描)→ 從尾部向前移動元素 → 放入新值。注意迴圈邊界與有效長度更新。