直接插入排序作为最简单的排序方法之一,其时间复杂度我O(n^2),而空间复杂度为O(1)
其核心思想就是利用一个记录的辅助空间(也可以叫它 "哨兵" )
哨兵常常其数组的首位,或者末位(方便操作)
定义数组
typedef struct
{
int *v;
int length;
} SSTable;
初始化
#define maxsize 10 //数组长度
void Init_L(SSTable & l)
{
l.v = new int [maxsize+1];
if(!l.v)
{
cout<<"创建失败"<<endl;
exit(1);
}
l.length=maxsize;
for(int i=1;i<=l.length;i++) //l.v[0]作为哨兵
cin>>l.v[i];
}
排序部分:
void Insert_L(SSTable & l) //按升序
{
for(int i=2;i<=l.length;i++)
{
if(l.v[i-1]>l.v[i])
{
l.v[0]=l.v[i];
l.v[i]=l.v[i-1];
for(int j=i-2;l.v[j]>l.v[0];j--)
{
l.v[j+1]=l.v[j]; //比l.v[0](原来的l.v[i])大的都向后移一位
}
l.v[j+1]=l.v[0];
}
}
}