几种O(Nlog(N))的排序

排序

http://www.nowcoder.com/questionTerminal/2baf799ea0594abd974d37139de27896

归并排序

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        // write code here
        mergeSort(arr, 0, arr.length-1);
        return arr;
    }

    public void mergeSort(int[] arr, int l, int r){
        if(l == r){
            return;
        }

        int mid = l + ((r-l) >> 1);    //中点位置
        mergeSort(arr, l, mid);
        mergeSort(arr, mid+1, r);
        merge(arr, l, mid, r);
    }

    public void merge(int[] arr, int l, int mid, int r){
        int[] help = new int[r-l+1];
        int i = 0;
        int p1 = l;    //左半数组的下标
        int p2 = mid + 1;    //右半数组的下标

        //判断是否越界
        while(p1 <= mid && p2 <= r){
            help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
        }

        //p1没有越界,说明p2越界了,将左边剩余元素拷贝到辅助数组
        while(p1 <= mid){
            help[i++] = arr[p1++];
        }

        //p2没有越界,说明怕越界了
        while(p2 <= r){
            help[i++] = arr[p2++];
        }

        //将辅助数组元素拷贝还原数组
        for(i = 0; i < help.length; i++){
            arr[l+i] = help[i]; 
        }


    }
}
全部评论

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
斑驳不同:还为啥暴躁 假的不骂你骂谁啊
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务