希尔排序又叫缩小增量排序,它通过比较相距一定间隔的元素来工作,各趟比较所用的距离(希尔增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。
希尔排序为不稳定的排序,其时间复杂度为O(nlogn),空间复杂度为1
void ShellSort(int A[], int size);
int main(void)
{
int A[] = {9,8,7,6,5,4,3,2,1,3};
int i,size = sizeof(A)/sizeof(int);
ShellSort(A, size);
for(i = 0; i < size; i++)
printf("%d ",A[i]);
printf("\n");
return 0;
}
void ShellSort(int A[], int size)
{
int i, j, Increment;
int Temp;
for(Increment = size/2; Increment > 0; Increment /= 2)
{
for(i = Increment; i < size; i++)
{
Temp = A[i];
for(j = i; j >= Increment; j -= Increment)
{
if(Temp < A[j-Increment])
A[j] = A[j-Increment];
else
break;
}
A[j] = Temp;
}
}
}