插入排序算法分析

Posted 无门der日常

tags:

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

插入排序


原理


现在我们要对一个数组进行排序


设数组A的A[0..j]项为一个已经排好序的子数组

当满足以下条件的时候,易证数组A在程序结束的时候能顺利排序


条件一:在数组开始排序之前,A[0..j]已经排好序了

条件二:在一次迭代结束后,A[0..j]仍然处于有序状态

条件三:在每次迭代结束后,j都会自增1,最终使得整个数组都处于有序的状态


如何满足这三个条件


首先,当只有一个元素的时候,毫无疑问是已经排好序的元素

其次,需要找到插入的新元素的应该插入的位置,以保证条件二能成立,即每次迭代结束后子数组仍然处于有序的状态


伪代码

for j = 2 to A.length

    key = A[j]

    // Insert A[j] into the sorted sequence A[1..j-1]

    i = j - 1

    while i > 0 and A[j] > key

        A[i+1] = A[i]

        i = i - 1

    A[i+1] = key


算法分析


接下来我们将对插入排序所耗费的资源进行分析


首先是空间资源的占用

我们可以看得出来,插入排序是一种原地排序

即它不占用多余的数组,至多只占用常数级别的空间


其次是我们最关心的时间资源的占用



可以计算出来总的时间资源占用

插入排序算法分析



最差的运行时间情况是




可以看出来最坏的情况是O(n^2)级别的


C语言代码实现


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

深入浅出理解排序算法系列 插入排序算法的实现与性能分析

插入排序(直接插入排序希尔排序);交换排序(冒泡排序快速排序);选择排序(简单选择排序堆排序);归并排序和基数排序;基于关键词比较的排序算法下界分析

插入排序的算法描述和分析

JDK 源码分析:插入排序算法

数据结构学习笔记——插入排序(直接折半插入希尔排序)

选择排序快速排序插入排序等经典八大算法稳定性分析