数据结构【1】两种排序
直接排序
稳定,逻辑简单,当然当问题规模n较小时,时间复杂度也 不大。
时间复杂度o(n^2)空间复杂度o(1)
void Intersect(int *arr, int len)
{
for(int i=1; i<len; i++)
{
int tmp = arr[i];
int j;
for(j=i-1; j>=0; j--)
{
if(arr[j] > tmp)
{
arr[j+1] = arr[j];
}
else
{
break;
}
}
arr[j+1] = tmp;
}
}
希尔排序
是直接排序的优化,并不稳定,时间复杂度大致为o(n^1.7),空间复杂度为o(1)
void Shell(int *arr, int len, int gap)
{
for(int i=gap; i<len; i++)//
{
int tmp = arr[i];
int j;
for(j=i-gap; j>=0; j=j-gap)
{
if(arr[j] > tmp)
{
arr[j+gap] = arr[j];
}
else
{
break;
}
}
arr[j+gap] = tmp;
}
}
void Shell_Sort(int *arr, int len)
{
int gap[] = {5,3,1};//最小增量数组
for(int i=0; i<sizeof(gap)/sizeof(gap[0]); i++)
{
Shell(arr, len, gap[i]);
}
}