int book[11], i, t, j;
for (i = 0; i < 11; i++) book[i] = 0;
for (i = 0; i < 11; i++) {
scanf("%d", &t);
book[t]++; // 危險:t 可能超出 0~10
}
book 大小為 11,合法索引 0~10。t = 15 或負數,book[t] 存取越界,觸發未定義行為(通常為段錯誤/程式停止運作)。#define MAX_VAL 10
int book[MAX_VAL + 1] = {0};
int t;
for (int i = 0; i < 11; i++) {
if (scanf("%d", &t) != 1) break;
if (t < 0 || t > MAX_VAL) {
fprintf(stderr, "輸入值 %d 超出範圍 0~%d,忽略\n", t, MAX_VAL);
continue;
}
book[t]++;
}
| 優點 | 缺點 |
|---|---|
| 時間複雜度 O(n+k),極快 | 需知資料範圍,且範圍不可過大(記憶體限制) |
| 穩定排序 | 不適用浮點數、字串等非整數鍵值 |
| 實作簡單 | 資料分佈極不均時空間浪費大 |
qsort 或 std::sort (C++)。記住:陣列索引越界是 C/C++ 程式崩潰的頭號殺手,輸入驗證不可省略。