給定一個已排序的整數陣列 (大小 11,前 10 個元素有值,第 11 個預留為 0),輸入一個新數字,插入適當位置使陣列維持升序。
#include
int main() {
int a[11] = {1,4,6,9,13,16,19,28,40,100}; // 第 11 個元素自動初始化為 0
int temp1, temp2, number, end, i, j;
printf("original array is:\n");
for (i = 0; i < 11; i++) printf("%5d", a[i]);
printf("\n");
printf("insert a new number: ");
scanf("%d", &number);
end = a[9]; // 目前最大值 (第 10 個元素)
if (number > end) {
a[10] = number; // 直接放入預留位置
} else {
for (i = 0; i < 10; i++) {
if (a[i] > number) { // 找到插入點
temp1 = a[i];
a[i] = number;
for (j = i + 1; j < 11; j++) { // 後移後續元素
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break;
}
}
}
for (i = 0; i < 11; i++) printf("%6d", a[i]);
printf("\n");
return 0;
}
original array is:
1 4 6 9 13 16 19 28 40 100 0
insert a new number: 25
1 4 6 9 13 16 19 25 28 40 100
int a[11] = {...}; 僅給 10 個初始值,第 11 個自動為 0 (C 標準保證)temp1 持有被取代值,temp2 暫存下一個被取代值,實現原地後移無需額外陣列void* + 比較函式指標支援任意型別std::vector::insert、C bsearch + memmove這是經典「陣列操作」入門題,強迫練習:索引邊界控制、元素搬移邏輯、邊界條件處理。建議初學者在紙上模擬 temp1/temp2 輪換過程,內化「原地後移」核心模式。