Algorithms - Insertion sort

印象

图1 插入排序过程

思想

插入排序(Insertion Sort)的主要思想是不断地将待排序的元素插入到有序序列中,是有序序列不断地扩大,直至所有元素都被插入到有序序列中。

分析

  • 时间复杂度:
    • 最优时间: O(\(n-1\))
    • 最坏时间: O(\(\frac{1}{2}n(n-1)\))
    • 平均时间: O(\(n^2\))

插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千;或者若已知输入元素大致上按照顺序排列,那么插入排序还是一个不错的选择。 插入排序在工业级库中也有着广泛的应用,在STL的sort算法和stdlib的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序(通常为8个或以下)。

代码示例

C++

void insertion_sort(int arr[], int len)
{
    for (int i = 1; i < len; i++)
    {
        int key = arr[i];
        int j = i - 1;
        while ((j >= 0) && (key < arr[j]))
        {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

参考

Wikipedia - Insertion sort

posted @ 2019-02-25 15:24  郑大峰  阅读(126)  评论(0编辑  收藏  举报