代码如下,时间复杂度为O(n^2)空间复杂度为O(1)特点:稳定适合简单排序,数据量较小的情况
#include<iostream>
#include<cstdlib>
#include <ctime>
using namespace std;
void InsertionSort (int a[],int len)
{
if (a==NULL||len<=1)
{
return ;
}
for(int j=1;j<len;j++)
{
int temp=a[j];
int p=j;
while(p>0&&a[p-1]>temp)
{
a[p]=a[p-1];
p--;
}
a[p]=temp;
}
}
void InsertionTwoSort (int a[],int len)
{
if (a==NULL||len<=1)
{
return ;
}
for(int j=1;j<len;j++)
{
int temp=a[j];
//可以考虑二分插入
int start=0,end=j;
while(start<end)
{
int mid=start+(end-start)/2;
if (a[mid]<temp)
{
start=mid+1;
}
else
end=mid;
}
int p=j;
while(p>end)
{
a[p]=a[p-1];
p--;
}
a[p]=temp;
}
}
void SortRunTime(int a[],int length)
{
clock_t start,end;
start=clock();
InsertionTwoSort(a,length);
end=clock();
cout<<" Insert RunTime : "<<(double)(end-start)/CLOCKS_PER_SEC;
}
int rand(int p,int q)
{
int size=q-p+1;
return p+rand()%size;
}
int main()
{
int a[100000];
int num=100000;
for (int i=0;i<num;i++)
{
a[i]=rand(0,200000);
}
SortRunTime(a,num);
return 0;
}