直接插入排序时间复杂度为O(n^2),空间复杂度为O(1),是一种稳定的排序方法。当序列中的记录基本有序或待排序记录较少时,直接插入排序是最佳的排序方法。但当待排序的记录个数较少时,大量的比较和移动操作是直接插入排序算法的效率降低。
基本思想:把记录分为有序区和无序区,开始时有序区为a[0],无序区为a[1,2,3...n-1],然后无序区里的记录依次插入到有序区。
//直接插入排序
#include<iostream>
using namespace std;
void DirectInsertSort(int a[],int n)
{
int i;
for (i = 1; i <n; i++) //无序区
{
if(a[i]<a[i-1]){//亮点,先于有序区的最大值比较,如果大于此值,此次循环不需要做插入操作,避免不必要的比较
int temp=a[i];//temp作为待插入记录的暂存单元和查找记录的插入位置过程中的“哨兵”
for(int j=i-1;temp<a[j];j--) a[j+1]=a[j];
a[j+1]=temp;
}
}
}
void main()
{
int a[6]={2,9,1,6,3,8};
DirectInsertSort(a,6);
for(int i=0;i<6;i++)
cout<<a[i]<<" ";
cout<<endl;
}
运行结果如下: