码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序java实现

时间:2016-12-08 23:32:19      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:分治法   bsp   stat   while   递归   比较   排序   有序   java实现   

public static void main(String[] args) {
        int arr[]={2,4,6,8,14,1,3,5,9,11};
        merge(arr, 0, arr.length-1);
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
    
    //递归排序,分治法,自顶向下,递归分割数组,最终归并
    public static void merge(int [] arr,int start,int end){
        int mid=(start+end)/2;
        if(start<end){
            merge(arr, start, mid); //递归对arr[start...mid]排序
            merge(arr, mid+1, end);//递归对arr[mid+1...end]排序
            doMerge(arr,start,mid,end);//组合,将两个有序合并为一个有序区
        }
    }

    //组合,归并
    private static void doMerge(int[] arr, int start, int mid, int end) {
        int temp[]=new int[end-start+1];
        int tempIndex=0;
        int index=start;
        int right=mid+1;
        //两个子序列进行比较,小的放入临时数组
        while(index<=mid&&right<=end){
            if(arr[index]<=arr[right]){
                temp[tempIndex++]=arr[index++];
            }else{
                temp[tempIndex++]=arr[right++];
            }
        }
        //将左边剩下的元素加入到临时数组
        while(index<=mid){
            temp[tempIndex++]=arr[index++];
        }
        //将右边剩下的元素加入到临时数组
        while(right<=end){
            temp[tempIndex++]=arr[right++];
        }
        //复制临时数据到arrr[]数组中
        for(int i=0;i<temp.length;i++){
            arr[i+start]=temp[i];
        }
    }

 

归并排序java实现

标签:分治法   bsp   stat   while   递归   比较   排序   有序   java实现   

原文地址:http://www.cnblogs.com/wenhulu/p/6146860.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!