几种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]; 
        }


    }
}
全部评论

相关推荐

迟缓的斜杠青年巴比Q...:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务