直接插入排序是最简单的排序算法
算法思想:将第一个数据元素看成是一个有序的子序列,再依次从第二个数据元素起逐个插入到这个有序的子序列中。
设 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)
直接插入排序适合数据元素较少的情况,数据元素较大则不宜用直接插入排序