算法:插入排序

Posted nukxiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法:插入排序相关的知识,希望对你有一定的参考价值。

插入排序是数学归纳法的思想,假定之前的数据已经排序,取出下一个数据,按顺序找到其安插的位置,使得新取出的数据与之前数据组成新的排好序的数据。

这其中的关键有:

  1. 之前的数据排好序,则我们排序可以从第二个数据开始取,因为一个数据始终是有序的,然后依次安插后续数据。

  2. 按顺序找到安插的数据的位置,一般我们从已排好顺序的数据的最后一个开始与将要安插的数据进行比较,满足安插条件则安插,否则依次向前。当然也可以使用二分查找进行搜寻。

插入排序的时间复杂度为最好O(n),平均O(n^2),最差O(n^2)。空间复杂度为O(1)。

template<typename Type = int>
void insertion_sort(std::vector<Type>& A)
{
    for (int i = 1; i < A.size(); ++i)
    {
        Type key = A[i];
        int j = i - 1;
        while (j >= 0 && A[j] > key)
        {
            A[j + 1] = A[j];
            --j;
        }
        A[j + 1] = key;
    }
}


以上是关于算法:插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

《算法》笔记 3 - 选择排序插入排序希尔排序

插入排序算法详解及代码实现

算法漫游指北(第八篇)插入排序算法描述动图演示代码实现过程分析时间复杂度和希尔排序算法描述动图实现代码实现过程分析时间复杂度

算法漫游指北(第八篇)插入排序算法描述动图演示代码实现过程分析时间复杂度和希尔排序算法描述动图实现代码实现过程分析时间复杂度