#include <stdio.h>
/*
希尔排序的原理:
希尔排序使用一个序列h(1),h(2),...,h(t)叫做增量序列
在使用增量h(k)的一趟排序后对于每一个i我们有A[i]<=A[i+h(k)]
希尔建议的增量序列是:h(t) = [N/2]和h(k) = [h(k+1)/2]
这里也一次增量为例
希尔排序的时间复杂度:
小于O(N^2)属于亚二次
*/
typedef int ElementType;
/************************************************************************/
/* shellsort 算法实现 */
/************************************************************************/
void Shellsort(ElementType A[],int N)
{
int i,j;
ElementType Tmp;
int Increment;//定义增量
for (Increment = N/2;Increment >0;Increment/=2) //使用不同的增量序列
for(i = Increment;i<N;i++){
Tmp = A[i];
for (j=i;i>0;j-=Increment)
if (Tmp<A[j-Increment])
A[j] = A[j-Increment];
else
break;
A[j] = Tmp;
}
}
void main()
{
int a[14]={12,34,56,45,32,67,89,54,54,35,34,54,76,87};
Shellsort(a,14);
for (int i=0;i<14;i++)
printf("%d ",a[i]);
}