shell排序

shell排序

 1  #include < stdio.h >
 2  #include < time.h >
 3  #define  MAX 20
 4  #define  RANDOM(x) rand()%x
 5  void  shell_sort( int   * arr, int  n)
 6  {
 7      
 8       int  i,j,k,temp,gap;
 9       int  gaps[] = { 1 , 4 , 13 , 100 , 301 ,};
10       for (k = 0 ;gaps[k] < n;k ++ );
11       while ( -- k >= 0 )
12      {
13          gap = gaps[k];
14           for (i = gap;i < n;i ++ )
15          {
16              temp = arr[i];
17              j = i;
18               while (arr[j - gap] > temp && j >= gap)
19              {
20                  arr[j] = arr[j - gap];
21                  j = j - gap;
22              }
23              arr[j] = temp;
24          }
25      }
26  }
27  int  main()
28  {
29       int  arr[MAX];
30       int  i;
31      srand(time( 0 ));
32       for (i = 0 ;i < MAX;i ++ )
33      {
34          arr[i] = RANDOM( 100 );
35          printf( " %d  " ,arr[i]);
36      }
37  printf( " \n " );
38      shell_sort(arr,MAX);
39       for (i = 0 ;i < MAX;i ++ )
40      {
41          printf( " %d  " ,arr[i]);
42      }
43  printf( " \n " );
44  }

你可能感兴趣的:(shell排序)