直接插入排序
时间复杂度:最好:O(n)
最坏:O(n^2)
空间复杂度:O(1)
稳定
void InsertSort(int *arr,int len)
{
int tmp;
int i;
int j;
for(i =1;i<len;i++)
{
tmp = arr[i];
for(j= i-1;j>=0;j--)
{
if(arr[j] <= tmp)
{
break;
}
else
{
arr[j+1] = arr[j];
}
}
arr[j+1] = tmp;
}
}
希尔排序
时间复杂度:最好:O(n)^1.3-1.5
最坏:O(n^2)
空间复杂度:O(1)
稳定
void shell(int *arr,int len,int gap)
{
int tmp;
int i;
int j;
for(i = gap;i<len;i++)
{
tmp = arr[i];
for(j = i-gap;j >= 0;j -= gap)
{
if(arr[j] <= tmp)
{
break;
}
else
{
arr[j+gap] = arr[j];
}
}
arr[j+gap] =tmp;
}
}
void ShellSort(int *arr,int len)
{
int d[] = {5,3,1};
for(int i= 0;i<sizeof(d)/sizeof(d[0]);i++)
{
shell(arr,len,d[i]);
}
}