归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。   如 设有数列{6,202,100,301,38,8,1}   初始状态: [6] [202] [100] [301] [38] [8] [1] 比较次数   i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3   i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4   i=3 [ 1 6 8 38 100 202 301 ] 4   总计: 11次
新手。。表示看不懂这个意思。。麻烦哪位高手说说。。或写个代码来看看。百度那个看不懂。

解决方案 »

  1.   

    http://baike.baidu.com/history/id=7991638
      

  2.   

    归并排序算法思想:
       分而治之(divide - conquer);每个递归过程涉及三个步骤 
     第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素. 
     第二, 治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作  
     第三, 合并: 合并两个排好序的子序列,生成排序结果.
      

  3.   

    http://blog.csdn.net/java2000_net/article/details/4003498
    看下老紫竹的~
      

  4.   

    package com.caipan.test;public class Guibing {
    /**
     * 
     * @param arr
     *            数组
     */
    public void sort(int[] arr) {
    int[] tmparr = new int[arr.length];// 备份数组
    method(arr, tmparr, 0, arr.length - 1);
    } /**
     * 
     * @param arr
     *            源数组
     * @param tmparr
     *            备份数组
     * @param y
     *            开始位置
     * @param h
     *            结束位置
     */
    public void method(int[] arr, int[] tmparr, int y, int h) {
    int mid = (y + h) / 2;
    if (y == h) {
    return;
    }
    method(arr, tmparr, y, mid);// 递归,把arr数组,分成每个都只含一个元素的数组
    method(arr, tmparr, mid + 1, h);
    for (int i = 0; i <= h; i++) {// 备份arr数组
    tmparr[i] = arr[i];
    }
    int a1 = y;
    int a2 = mid + 1;
    for (int i = y; i <= h; i++) {
    if (a1 == mid + 1) {// 只有后部分
    arr[i] = tmparr[a2++];
    } else if (a2 > h) {// 只有前面部分
    arr[i] = tmparr[a1++];
    } else if (tmparr[a1] < tmparr[a2]) {// 小的复制到前面
    arr[i] = tmparr[a1++];
    } else {
    arr[i] = tmparr[a2++];
    }
    }
    } public static void main(String[] args) {
    Guibing g = new Guibing();
    int[] data = { 1, 8, 6, 4, 7, 3, 9 };
    g.sort(data);
    for (int tmp : data) {
    System.out.print(tmp + " ");
    }
    System.out.println();
    }
    }
    这个写的很简单吧,不是很难理解