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

归并排序

时间:2017-12-30 22:39:47      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:oid   blog   span   划分数   nbsp   分割   else   art   判断   

 

public static int[] mergeSort(int[] arr, int left,int right) {
        if (left < right){
            // 取分割位置
            int middle = (left + right) / 2;
            // 递归划分数组左序列
            mergeSort(arr, left, middle);
            // 递归划分数组右序列
            mergeSort(arr, middle+1, right);
            //将左数组和右数组进行归并
            merge(arr, left, middle, right);
        }
        return arr;
    }

    private static void merge(int[] arr, int left, int middle,int right) {
        int[] tempArray = new int[arr.length];  
        int leftEnd = middle;
        int rightStart = middle+1;
        // 临时数组的下标
        int tempIndex = left;
        int tmp = left;
        // 先循环两个区间段都没有结束的情况
        while ((left <= leftEnd) && (rightStart <= right)){
            // 左边的比右边的小,先插入左边的
            if (arr[left] < arr[rightStart]){
                tempArray[tempIndex++] = arr[left++];
            }else{
                tempArray[tempIndex++] = arr[rightStart++];
            }
        }
        // 判断左序列是否结束
        while (left <= leftEnd){
            tempArray[tempIndex++] = arr[left++];
        }
        // 判断右序列是否结束
        while (rightStart <= right){
            tempArray[tempIndex++] = arr[rightStart++];
        }
        // 将临时数组中的内容拷贝回原数组中  
        // (原left-right范围的内容被复制回原数组)
        while (tmp <= right) {  
            arr[tmp] = tempArray[tmp++];  
        } 
    }

 

归并排序

标签:oid   blog   span   划分数   nbsp   分割   else   art   判断   

原文地址:https://www.cnblogs.com/weishao-lsv/p/8151282.html

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