將待排序記錄逐一插入已排序有序序列適當位置,直到全部插入完畢。
{49, 60, 71}r[0]=11,從 71 向左比較右移,插入位置 r[1] → {11, 49, 60, 71}{3, 11, 24, 49, 60, 66, 71}r[0] 存待插入值。j。r[j+1] = r[j]。r[j+1]。public void zjinsert(Record r[], int n) {
for (int i = 1; i < n; i++) {
Record temp = r[i];
int j = i - 1;
while (j >= 0 && temp.key < r[j].key) {
r[j + 1] = r[j];
j--;
}
r[j + 1] = temp;
}
}
| 指標 | 數值 |
|---|---|
| 時間複雜度 | 最佳 O(n)、最差/平均 O(n²) |
| 空間複雜度 | O(1) |
| 穩定性 | 穩定 |
| 適應性 | 近乎有序極快 |
直接插入排序以「人工整理牌」直覺為藍本,代碼簡潔、穩定、適應性強,適合小規模或近乎有序資料。哨兵技巧簡化邊界判斷,是教學與工程雙適用的經典排序演算法。