数据结构---直接插入排序

来源:互联网 发布:淘宝开店快递费用标准 编辑:程序博客网 时间:2024/05/22 08:28

直接插入排序是最简单的排序算法

算法思想:将第一个数据元素看成是一个有序的子序列,再依次从第二个数据元素起逐个插入到这个有序的子序列中。

设 i 为第 i 个插入到序列中的元素,那么 elem[i] 插入到elem[0]~~elem[i-1] 构成的有序子序列中。

在进行插入时注意要从后向前逐一比较,并且在比较时一定要注意边界问题 i 与 j ,由于第一个元素直接有序,因此排序直接从第二个元素开始,这就是i从1 开始的原因。

而 j 则是从当前待插入元素的前一个开始即 i-1。

代码如下:

bool InsertSort(int *arr,int len)
{

 for(int i=1; i<len; ++i)

{

int temp=arr[i];                                 

for(int j=i-1; j>=0; --j)

{

if(temp<arr[j])

 {

arr[j+1] = arr[j];

}

else

break;

}

arr[j+1] = temp;

}

return true;

}

直接插入排序时间复杂度:O(n^2), 空间复杂度为O(1)

当序列越接近有序时间复杂度越小,最好的时间复杂度为O(n)

直接插入排序适合数据元素较少的情况,数据元素较大则不宜用直接插入排序

0 0