插入类排序--直接插入排序
在有序数组中插入一个元素,可以作为一种排序方法的基础。
只有一个元素的数组是一个有序数组,对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];
作为基本操作语句
考虑最坏的情况,即整个序列是逆序的 O(n^2)
考虑最好的情况,即整个序列是有序的 O(n)
综上所述,本算法的平均时间复杂度O(n^2)
空间复杂度分析
算法所需的辅助存储空间不随待排序列规模的变化而变化,是个常量,O(1)
