题解 | #输入整型数组和排序标识,对其元素按照升序或降序进行排序#

输入整型数组和排序标识,对其元素按照升序或降序进行排序

http://www.nowcoder.com/practice/dd0c6b26c9e541f5b935047ff4156309

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int number = Integer.valueOf(scan.nextLine().trim());
        String line = scan.nextLine();
        String[] strs = line.split(" ");
        int[] nums = new int[strs.length];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = Integer.valueOf(strs[i].trim());
        }
        int sign = Integer.valueOf(scan.nextLine().trim());
        mergeSort(nums, sign);
        for (int i = 0; i < nums.length; i++) {
            if (i == nums.length - 1) {
                System.out.print(nums[i]);
                return;
            }
            System.out.print(nums[i] + " ");
        }
    }
    public static void mergeSort(int[] nums, int sign) {
        if (null == nums || nums.length < 2) {
            return;
        }
        process(nums, 0, nums.length - 1, sign);
    }
    public static void process(int[] nums, int start, int end, int sign) {
        if (start >= end) {
            return;
        }
        int mid = start + ((end - start) >> 1);
        process(nums, start, mid, sign);
        process(nums, mid + 1, end, sign);
        if (sign == 0) {
            merge1(nums, start, mid, end);
        } else {
            merge2(nums, start, mid, end);
        }
    }
    public static void merge1(int[] nums, int start, int mid, int end) {
        int[] helper = new int[end - start + 1];
        int index = 0;
        int p1 = start;
        int p2 = mid + 1;
        while (p1 <= mid && p2 <= end) {
            helper[index++] = nums[p1] <= nums[p2] ? nums[p1++] : nums[p2++];
        }
        while (p1 <= mid) {
            helper[index++] = nums[p1++];
        }
        while (p2 <= end) {
            helper[index++] = nums[p2++];
        }
        for (int i = 0; i < helper.length; i++) {
            nums[start + i] = helper[i];
        }
    }
    public static void merge2(int[] nums, int start, int mid, int end) {
        int[] helper = new int[end - start + 1];
        int index = 0;
        int p1 = start;
        int p2 = mid + 1;
        while (p1 <= mid && p2 <= end) {
            helper[index++] = nums[p1] >= nums[p2] ? nums[p1++] : nums[p2++];
        }
        while (p1 <= mid) {
            helper[index++] = nums[p1++];
        }
        while (p2 <= end) {
            helper[index++] = nums[p2++];
        }
        for (int i = 0; i < helper.length; i++) {
            nums[start + i] = helper[i];
        }
    }
}
全部评论
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 17:05

相关推荐

不愿透露姓名的神秘牛友
今天 15:43
点赞 评论 收藏
分享
10-16 22:56
门头沟学院 C++
1234567800:歌尔今年给211开14-15k吗,我本地人连面试都不给😂
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务