插入排序 是一種直觀且易於理解的排序算法。其核心思想是:將數組分為「已排序區間」和「未排序區間」,初始時已排序區間只有一個元素,然後依次從未排序區間取出元素,在已排序區間中找到合適位置插入,並保持已排序區間有序。這就像我們整理撲克牌時,抓到一張牌就插入到手中已排好序的牌的合適位置一樣。
x。x 的元素位置。x 的元素向右移動一位,騰出空位。x 插入空位,完成一輪插入。#include#include #include #define N 10 int main() { int a[N] = {-1, 3, 6, 9, 13, 22, 27, 32, 49}; // 預留一個空位給待插數 int x, j, k; srand((unsigned)time(NULL)); x = rand() % 100; printf("隨機產生 x 的值為: %d\n", x); // 若 x 大於當前最大值,直接放入預留位置 if (x > a[N-2]) { a[N-1] = x; } else { // 查找待插位置 j = 0; while (j <= N-2 && x > a[j]) { j++; } // 從後向前移動元素,騰出位置 for (k = N-2; k >= j; k--) { a[k+1] = a[k]; } a[j] = x; // 插入待插數 } printf("排序後輸出:\n"); for (j = 0; j <= N-1; j++) { printf("%d ", a[j]); } printf("\n"); return 0; }
隨機產生 x 的值為: 15 排序後輸出: -1 3 6 9 13 15 22 27 32 49
| 特性 | 描述 |
|---|---|
| 時間複雜度 | 最好 O(n)(已有序),最壞 O(n²)(逆序),平均 O(n²) |
| 空間複雜度 | O(1),原地排序 |
| 穩定性 | 穩定(相等元素相對順序不變) |
| 適用場景 | 數據量小、近乎有序的數據 |
插入排序雖然時間複雜度為平方級,但代碼簡潔、穩定、適應性強(對近乎有序數據接近 O(n)),是小規模數據排序的首選。理解其「插入」與「移位」的核心邏輯,有助於掌握更高級的排序算法。