插入类排序--直接插入排序

Posted 逸诚考研

tags:

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

在有序数组中插入一个元素,可以作为一种排序方法的基础。
只有一个元素的数组是一个有序数组,对n个元素的数组,可以从第一个元素所构成的单元数组开始,不断实施插入操作。
插入第二个元素,得到2个元素的有序数组。插入第三个元素,得到3个元素的有序数组。
如此反复,得到n个元素的有序数组。

示例

对序列:6,5,8,4,3,1 进行直接插入排序

  • 图中灰色部分代表待排序列

  • 图中透明部分代表已排序列

int main(){ int a[10] = { 6,5,8,4,3,7 };
int temp, j; for (int i = 1; i < 6; ++i){ temp = a[i]; for (j = i - 1; j >= 0 && temp < a[j]; --j){ a[j + 1] = a[j]; } a[j + 1] = temp; } j = 0; while (j < 6){ printf("%d", a[j]); ++j; } return 0;}

时间复杂度分析

由直接插入排序代码,选取最内层

a[j + 1] = a[j];

作为基本操作语句

  1. 考虑最坏的情况,即整个序列是逆序的 O(n^2)

  2. 考虑最好的情况,即整个序列是有序的 O(n)


综上所述,本算法的平均时间复杂度O(n^2)

空间复杂度分析

  • 算法所需的辅助存储空间不随待排序列规模的变化而变化,是个常量,O(1)


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

插入类排序(直接插入排序)

插入类排序--直接插入排序

数据结构与算法——插入类排序(直接插入排序,希尔排序)

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

算法学习直接插入排序

图解直接插入排序和希尔排序