插入排序 算法学习笔记

思想:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,直到全部插入完成。

伪代码:

INSERTION-SORT(A):

1 for j = 2 to A.length
2     key = A[j]
3     //Insert A[j] into the sorted sequence A[1..j - 1]
4     i = j - 1
5     while i > 0 and A[i] > key
6         A[i + 1] = A[i]
7         i = i - 1
8     A[i + 1] = key

这里假设数组下标从1开始

代码:

void InsertionSort(int a[], const int length){
    int key;
    for (int i = 1; i < length; ++i){
        key = a[i];
        int j = i - 1;
        while (j >= 0 && a[j] > key){
            a[j + 1] = a[j];
            --j;
        }
        a[j + 1] = key;
    }
}

插入排序时间复杂度:

  • 最好情况:O(n)
  • 最坏情况:O(n2)
  • 平均情况:O(n2)

空间复杂度:O(1)

稳定性: 稳定

返回 算法学习笔记

猜你喜欢

转载自www.cnblogs.com/Toya/p/9778978.html