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

归并排序

时间:2018-05-26 15:27:35      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:new   test   while   system   play   open   void   归并   归并排序   

技术分享图片
 /**
     * 借助临时数组进行移动
     */
    @Test
    public void mergerSort(){
        int[] arr={1,4,5,6,7,8,3,2,4,6,7,3,5,6,4,3,2};
        int[] temp = new int[arr.length];
        mergerSort(arr,0,arr.length-1,temp);
        System.out.println(Arrays.toString(arr));

    }

    public void mergerSort(int[] arr,int left,int right,int[] temp){
        if(left<right){
            int mid=(right+left)/2;
            mergerSort(arr,left,mid,temp);
            mergerSort(arr,mid+1,right,temp);
            merger(arr,left,mid,right,temp);
        }
    }

    public void merger(int[] arr,int left,int mid,int right,int[] temp){
        int i=left;//左序列
        int j=mid+1;//右序列
        int t=0;//临时序列
        while (i<=mid && j<=right){
            if(arr[i]<=arr[j]){
                temp[t++]=arr[i++];
            }else {
                temp[t++]=arr[j++];
            }
        }

        while (i<=mid){
            temp[t++]=arr[i++];
        }
        while (j<=right){
            temp[t++]=arr[j++];
        }
        t=0;
        while (left<=right){
            arr[left++]=temp[t++];
        }

    }
View Code

归并排序算法实现

大致思路:

1、首先对数组进行切分,分成最小单元

2、然后进行数据合并,使用临时进行

比如  1 ,4,,5,6,7,8   分成独立的个体,之后组织    14     56     78   之后在   14和56合并排序,之后在和78排序     

 

归并排序

标签:new   test   while   system   play   open   void   归并   归并排序   

原文地址:https://www.cnblogs.com/nihaofenghao/p/9092890.html

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