返回主页

插入排序

1-based 下标的插入排序,时间复杂度 O(n²),空间 O(1),稳定

算法模板更新于 2026年8月20日 11:31#排序#插入排序
C++27685 Bytes
下载文件
// 升序,数组下标从 1 开始,有效范围为 a[1] ~ a[n]

// 1. 后移法
void insert_sort1(int a[], int n) {
    for (int i = 2; i <= n; i++) { 
        int key = a[i];
        int j = i - 1;

        // 将比 key 大的元素往后移动一位
        while (j >= 1 && a[j] > key) {
            a[j + 1] = a[j];
            j--;
        }
        // 找到插入位置,将 key 放进去
        a[j + 1] = key;
    }
}

// 2. 相邻交换法
void insert_sort2(int a[], int n) {
    for (int i = 2; i <= n; i++) {
        // 将 a[i] 向左交换到正确位置
        for (int j = i; j >= 2 && a[j] < a[j - 1]; j--) {
            swap(a[j], a[j - 1]);
        }
    }
}