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


    }
}
全部评论

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面7人在聊
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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