將無序數組分為「已排序區」與「待插入區」。初始已排序區含首元素。每輪從待插入區取首元素,在已排序區中從右向左比較,找到插入位置,後移元素騰出空位,完成插入。重複直到待插入區為空。
初始: [3] | [2 4 1] 第1輪: 2<3 → 插入前 → [2 3] | [4 1] 第2輪: 4>3 → 插入後 → [2 3 4] | [1] 第3輪: 1<2 → 插入最前 → [1 2 3 4] | []
void insert_sort(int a[], int &n) { // n 為元素個數
for (int i = 1; i < n; i++) {
int t = a[i];
int j = i - 1;
while (j >= 0 && a[j] > t) {
a[j+1] = a[j];
j--;
}
a[j+1] = t;
}
}
小規模數據、近乎有序數組、需穩定排序場合。大規模數據優選快排/歸併/堆排。