天天看点

希尔排序

/*

 时间: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");

 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

继续阅读