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

          歸并排序(merge sort)算法實現

              歸并排序(merge sort)體現了分治的思想,即將一個待排序數組分為兩部分,對這兩個部分進行歸并排序,排序后,再對兩個已經排序好的數組進行合并。這種思想可以用遞歸方式很容易實現。歸并排序的時間復雜度為O(nlogn),空間復雜度為O(n)

          實現代碼如下:
          #include <stdio.h> 
          #include 
          "common.h"  
          void merge(int data[], int p, int q, int r) 
          {     
              
          int i, j, k, n1, n2;     
              n1 
          = q - p + 1;     
              n2 
          = r - q;     
              
          int L[n1];     
              
          int R[n2];      
              
          for(i = 0, k = p; i < n1; i++, k++)         
                  L[i] 
          = data[k];     
              
          for(i = 0, k = q + 1; i < n2; i++, k++)         
                  R[i] 
          = data[k];     
              
          for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)     
              {         
                  
          if(L[i] > R[j])         
                  {             
                      data[k] 
          = L[i];             
                      i
          ++;         
                  }         
                  
          else         
                  {             
                      data[k] 
          = R[j];             
                      j
          ++;         
                  } 
              }
              
          if(i < n1)     
              {         
                  
          for(j = i; j < n1; j++, k++)             
                  data[k] 
          = L[j];     
              }     
              
          if(j < n2)     
              {         
                  
          for(i = j; i < n2; i++, k++)             
                      data[k] 
          = R[i];     
              }  
          }
          void merge_sort(int data[], int p, int r) 
          {     
              
          if(p < r)     
              {         
                  
          int q = (p + r) / 2;         
                  merge_sort(data, p, q);         
                  merge_sort(data, q 
          + 1, r);         
                  merge(data, p, q, r);     
              } 


          void test_merge_sort() 
          {   
              
          int data[] = {4412145-123-10121};     
              printf(
          "-------------------------------merge sort----------------------------\n");    
              out_int_array(data, 
          7);     
              merge_sort(data, 
          06);     
              out_int_array(data, 
          7); 


          int main() 
          {    
              test_merge_sort();    
              
          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-14 22:57 銀河使者 閱讀(3276) 評論(4)  編輯  收藏 所屬分類: C/C++

          評論

          # re: 歸并排序(merge sort)算法實現  回復  更多評論   

          歸并排序體現了分治的思想,很有價值
          2008-05-16 12:19 | 網上買書

          # re: 歸并排序(merge sort)算法實現  回復  更多評論   

          使用分治法實現基本正確。但是merge函數中有兩個數組的定義:
          int L[n1];
          int R[n2];
          在維數處使用了變量,不對。靜態數組的維數必須在編譯時確定,運行時動態給定數組維數需要使用動態內存分配。所以merge函數和mergesort函數都需要修改。

          http://zhidao.baidu.com/question/75588993.html
          2009-02-15 21:04 | 剛哥

          # re: 歸并排序(merge sort)算法實現  回復  更多評論   

          @剛哥
          這算法是很多年前寫的,現在看看寫成用變量定義數組了。估計是用Java用多了,不小心寫成Java格式的了。以前這些算法好象都調試過,可能是這個沒測試過。可能當初是寫的示意代碼。基本上都忘了細節了。^_^
          2009-02-15 22:46 | 銀河使者

          # re: 歸并排序(merge sort)算法實現  回復  更多評論   

          @剛哥
          你的那個是C++的算法,基本思路類型,都是數據結構講的,哈哈!!這些數據結構書上都有,看看就知道了!
          2009-02-15 22:47 | 銀河使者
          主站蜘蛛池模板: 宜丰县| 卓尼县| 香港 | 曲阳县| 忻州市| 越西县| 永修县| 邯郸市| 班玛县| 谢通门县| 邵武市| 长春市| 天等县| 鹿泉市| 青冈县| 桓台县| 濮阳县| 福泉市| 曲靖市| 榆林市| 雷山县| 临湘市| 白玉县| 象州县| 卫辉市| 罗山县| 涿鹿县| 化隆| 开江县| 邵阳县| 陇西县| 晋宁县| 河间市| 鄂州市| 阿拉善左旗| 尉犁县| 镇赉县| 嵊泗县| 玉溪市| 麦盖提县| 化德县|