/*
時間:2012年5月18日 23:06:28
功能:希爾排序。
*/
# include <stdio.h>
# include <malloc.h>
void Shellsort(int data[], int n)
{
int * delta,k,i,t,dk,j;
k=n;
delta = (int *)malloc(sizeof(int)*(n/2));
i = 0;
do{
k = k/2;
delta[i++] = k;
}while(k>0);
i=0;
while ((dk = delta[i])>0)
{
for (k=delta[i];k<n;++k)
{
t=data[k];
for(j=k-dk;j>=0 && t<data[j]; j-=dk)
{
data[j+dk]=data[j];
}
data[j+dk]=t;
}
++i;
}
}
// 數組輸出。
void OutPut(int data[], int len)
{
for (int i=0; i<len; i++)
{
printf("%d ", data[i]);
}
printf("\n\n");
}
int main(void)
{
int data[] = {5, 7, 1, 6, 44, 11, 56, 33, 45, 21};
printf("未排序前:\n");
OutPut(data, 10);
Shellsort(data, 10);
printf("排序之後:\n");
OutPut(data, 10);
return 0;
}
/*
結果:
-----------------------------------
未排序前:
5 7 1 6 44 11 56 33 45 21
排序之後:
1 5 6 7 11 21 33 44 45 56
Press any key to continue ----------------------------------- */