希爾排序

/*
 時間: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  ----------------------------------- */