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

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

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

    posts - 15,comments - 65,trackbacks - 0
            本文最先發(fā)布于本人個(gè)人博客http://www.lovestblog.cn
            下面簡單的說說歸并排序,所謂歸并排序就是說把輸入數(shù)組分成兩組當(dāng)然也可以大于2組,一般我們是等量的分成2組,通過遞歸我們可以把長度為n的數(shù)組分成n個(gè)數(shù)組,我們通過一定的關(guān)鍵字比較把兩兩結(jié)合成一個(gè)有序的數(shù)組,然后回溯到原數(shù)組大小的有序數(shù)組,具體的我就不多說了,因?yàn)楸容^簡單,到網(wǎng)上可以找些相關(guān)文章看看什么是歸并排序,歸并排序算法可以再O(nlogn)的時(shí)間內(nèi)對長度為n的序列完成排序,至于合并兩個(gè)有序數(shù)組,假如這兩個(gè)數(shù)組的長度分別為m和n,那么我們只需要O(n+m)的時(shí)間久可以完成對這兩個(gè)有序數(shù)組的合并,下面還是代碼說明之:
    package org.rjb.Sort;
    /**
     * 歸并排序(升序排列)
     * 
    @author ljp
     *
     
    */

    public class MergeSort {
        
    /**
         * 對原始數(shù)組進(jìn)行平等劃分為兩個(gè)子數(shù)組
         * 
    @param nums
         
    */

        
    public static void sort(int[] nums){
            
    int n=nums.length;
            
    if(n<=1)
                
    return;
            
    int nums1[]=new int[n/2];
            
    int nums2[]=new int[n-n/2];
            
    for(int i=0,j=nums1.length;j<nums.length;i++,j++){
                
    if(i<nums1.length){
                    nums1[i]
    =nums[i];
                }

                nums2[i]
    =nums[j];
            }

            
    //遞歸對子數(shù)組進(jìn)行劃分
            sort(nums1);
            sort(nums2);
            
    //把子數(shù)組排序后的結(jié)果進(jìn)行合并
            merge(nums,nums1,nums2);
        }

        
    /**
         * 合并兩個(gè)有序的子數(shù)組為一個(gè)有序的數(shù)組
         * 
    @param nums 合并之后的數(shù)組
         * 
    @param num1 有序的子數(shù)組
         * 
    @param num2 有序的子數(shù)組
         
    */

        
    public static void merge(int[] nums,int num1[],int num2[]){
            
    int n1=num1.length-1;
            
    int n2=num2.length-1;
            
    int k=0;
            
    int k1=0,k2=0;
            
    while(k1<=n1||k2<=n2){
                
    int e=0;
                
    if(k1>n1){//如果第一個(gè)數(shù)組已經(jīng)全部比較完了,那么我們只要直接復(fù)制第二個(gè)數(shù)組的條目到合并數(shù)組中即可
                    e=num2[k2++];
                }
    else if(k2>n2){//如果第二個(gè)數(shù)組已經(jīng)全部比較完了,那么我們只要直接復(fù)制第一個(gè)數(shù)組的條目到合并數(shù)組中即可
                    e=num1[k1++];
                }
    else if(num1[k1]>num2[k2]){//把比較的兩個(gè)條目中關(guān)鍵值小的放到合并數(shù)組中
                    e=num2[k2++];
                }
    else{
                    e
    =num1[k1++];
                }

                nums[k
    ++]=e;
            }

        }

        
    /**
         * 主函數(shù)
         * 
    @param args
         
    */

        
    public static void main(String args[]){
            
    int[] nums={10,2,3,7,4,9,1};
            sort(nums);
            
    for(int i=0;i<nums.length;i++){
                System.out.print(nums[i]
    +" ");
            }
    System.out.println();
        }

    }

    posted on 2009-05-29 16:55 你假笨 閱讀(1221) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久热综合在线亚洲精品| 精品国产日韩亚洲一区在线 | 1000部禁片黄的免费看| 国产精品亚洲精品青青青| 国产一级淫片免费播放电影| 男女午夜24式免费视频| 亚洲国产精品免费观看 | 在线免费观看一级毛片| 91免费国产视频| 亚洲乱码无人区卡1卡2卡3| 亚洲午夜福利在线观看| 一个人免费高清在线观看| 一级做性色a爰片久久毛片免费| 亚洲综合亚洲国产尤物| 亚洲国产综合人成综合网站| 亚洲视频免费播放| 丝袜捆绑调教视频免费区| 中文字幕在线日亚洲9| 久久香蕉国产线看观看亚洲片| 日韩视频免费一区二区三区| 99国产精品免费视频观看| 男女作爱免费网站| 亚洲中文字幕无码一去台湾 | 亚洲国产美女精品久久| 精品国产亚洲一区二区在线观看 | 亚洲午夜电影一区二区三区| 亚洲精品乱码久久久久久| 成人国产mv免费视频| 99久久人妻精品免费一区| 久99久无码精品视频免费播放| 亚洲依依成人亚洲社区| 亚洲成a人片在线观| 国产国拍亚洲精品mv在线观看| 亚洲av午夜精品一区二区三区| 美女视频黄的全免费视频| a级毛片毛片免费观看久潮喷| 日韩亚洲人成网站| 亚洲精品福利你懂| 亚洲精品美女在线观看播放| 久久精品国产亚洲| 亚洲AV永久无码精品水牛影视|