隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數據加載中……

          希爾排序(shellsort)算法實現

              希爾排序(shellsort)又叫增量遞減(diminishing increment)排序,是由D.L. Shell發明的,這個算法是通過一個逐漸減小的增量使一個數組逐漸趨近于有序從而達到排序的目的。

                假設有一個數組int data[16] = {...}。 首先將這個增量設為16 / 2 = 8, 這樣就將這個數組分成了8個子數組,它們的索引是0, 8    1, 9   2, 10等等 。對這些子數組進行排序。然后再使增量為8 / 2 = 4,這樣就將原數組分成了4個子數組,它們的索引分別是0, 4, 8, 12    1, 5, 9, 13等等。再對這四組數進行排序,直到增量為1。
               以上所描述的增量遞減只是一種方法,這種方法并不是最有效率的。如f(n) = 3 * f(n - 1) + 1  f(1) = 1   (..., 121, 40, 13,  4, 1)就比上面的取增量的方法好。這種方法的時間復雜度是O(n ^1.5)

          算法如下

          #include <stdio.h>

          void output_array(int data[], int n)
          {
              
          int i;
              
          for(i = 0; i < n; i++)
                  printf(
          "%d ", data[i]);
              printf(
          "\n");
          }
          void swap(int *a, int *b)
          {
              
          int x;
              x 
          = *a;
              
          *= *b;
              
          *= x;
          }
          void insertion_sort(int data[], int n, int increment)
          {
              
          int i, j;
              
          for(i = increment; i < n; i += increment)
                  
          for(j = i; j >= increment && data[j] > data[j - increment]; j -= increment)
                      swap(
          &data[j], &data[j - increment]);
          }
          void shellsort(int data[], int n)
          {
              
          int i, j;
              
          for(i = n / 2; i > 2; i /= 2)
                  
          for(j = 0; j < i; j++)
                      insertion_sort(data 
          + j, n - j, i);
              insertion_sort(data, n, 
          1);
          }
          int main()
          {
              
          int data[] = {5316657766441110986};
              output_array(data, 
          12);
              shellsort(data, 
          12);
              output_array(data, 
          12);
              
          return 0;
          }




          Android開發完全講義(第2版)(本書版權已輸出到臺灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2008-05-15 22:01 銀河使者 閱讀(2398) 評論(1)  編輯  收藏 所屬分類: algorithmC/C++

          評論

          # re: 希爾排序(shellsort)算法實現  回復  更多評論   

          這是最標準的算法
          2008-05-16 12:08 | 網上買書
          主站蜘蛛池模板: 义乌市| 天门市| 新蔡县| 新巴尔虎左旗| 绵竹市| 惠来县| 云龙县| 宿州市| 凤翔县| 余江县| 招远市| 潜江市| 洛阳市| 大英县| 洛南县| 恭城| 柳江县| 奉节县| 资中县| 祁阳县| 油尖旺区| 阜新| 晋中市| 东乌珠穆沁旗| 景德镇市| 荥经县| 龙江县| 河间市| 崇礼县| 衢州市| 南投市| 湖北省| 大宁县| 古浪县| 金平| 张家界市| 利辛县| 那坡县| 深水埗区| 政和县| 金昌市|