<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 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開發(fā)完全講義(第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 銀河使者 閱讀(3273) 評論(4)  編輯  收藏 所屬分類: C/C++

    評論

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

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

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

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

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

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

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

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

    @剛哥
    你的那個是C++的算法,基本思路類型,都是數據結構講的,哈哈!!這些數據結構書上都有,看看就知道了!
    2009-02-15 22:47 | 銀河使者
    主站蜘蛛池模板: 亚洲精品成人片在线观看精品字幕| 亚洲乱码一区av春药高潮| 日韩免费观看一区| 色婷五月综激情亚洲综合| 日本中文一区二区三区亚洲| 免费毛片a线观看| 亚洲午夜无码毛片av久久京东热| 亚洲国产精品丝袜在线观看| 亚洲av无码无在线观看红杏| 性一交一乱一视频免费看| 香蕉免费看一区二区三区| 精品亚洲成A人无码成A在线观看| 免费一级毛片不卡不收费| 99re热精品视频国产免费| 18禁亚洲深夜福利人口| 老汉色老汉首页a亚洲| 国产免费午夜a无码v视频| 四虎成人精品永久免费AV| 美女视频黄频a免费| 337p日本欧洲亚洲大胆精品555588| 国产精品色午夜免费视频 | 久久久久久精品免费免费自慰| 亚洲大码熟女在线观看| 亚洲人成电影在在线观看网色| 国产免费资源高清小视频在线观看| 无码精品国产一区二区三区免费| 美女无遮挡免费视频网站| 亚洲熟妇无码久久精品| 国产成人A亚洲精V品无码| 成人性生活免费视频| 91福利免费视频| 国产啪精品视频网站免费尤物| 国产亚洲漂亮白嫩美女在线 | 久久精品国产亚洲av品善| 亚洲综合精品香蕉久久网97| 亚洲一区视频在线播放| 国产高清免费在线| 中国在线观看免费国语版| 亚洲视频在线免费观看| 成在线人视频免费视频| 免费在线观看自拍性爱视频|