首页 > 其他 > 详细

合并排序(MergeSort)

时间:2014-01-29 16:19:55      阅读:614      评论:0      收藏:0      [点我收藏+]

public class MergeSortDemo {
    public static void mergeSort(int[] data) {
        if (null == data || data.length == 0) {
            return;
        }
        mergeSort(data, 0, data.length - 1);
    }

    private static void mergeSort(int[] data, int start, int end) {
        if (start >= end)
            return;
        int middle = (start + end) >> 1;
        mergeSort(data, start, middle);
        mergeSort(data, middle + 1, end);
        mergeData(data, start, middle, end);
    }

    private static void mergeData(int[] data, int start,
            int middle, int end) {
        int length = end - start + 1;
        int[] tempData = new int [length];
        int left = start;
        int right = middle + 1;
        int all = 0;

        while (right <= end) {
            while (left <= middle && data[left] <= data[right]) {
                tempData[all++]=data[left++];
            }
            if (left > middle) break;
            while (right <= end && data[left] > data[right]) {
                tempData[all++] = data[right++];
            }
        }
        if (left <= middle) {
            System.arraycopy(data, left, tempData, all, middle - left + 1);
        }
        if (right <= end) {
            System.arraycopy(data, right, tempData, all, end - right + 1);
        }
        System.arraycopy(tempData, 0, data, start, tempData.length);
    }

    public static int[] genNumCollection(int length) {
        if(length <1) return null ;
        int[] data = new int[length];
        Random r = new Random();
        for (int i = 0; i < length; i++) {
            data[i]= r.nextInt(100);
        }
        return data;
    }

    public static void main(String[] args) {

        int[] data = genNumCollection(10);
        mergeSort(data);
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i]+"  ");
        }
    }

}

合并排序(MergeSort)的原理是对一个长度为 N 的元素序列 , 将其看成是 N 个独立的有序的序列,每次对长度为 d 的 “ 有序” 序列进行合并,直到 d == N ;








合并排序(MergeSort)

原文:http://blog.csdn.net/sun_star1chen/article/details/18780601

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!