插入排序算法分析
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语言代码实现
以上是关于插入排序算法分析的主要内容,如果未能解决你的问题,请参考以下文章
插入排序(直接插入排序希尔排序);交换排序(冒泡排序快速排序);选择排序(简单选择排序堆排序);归并排序和基数排序;基于关键词比较的排序算法下界分析