描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序
数据范围: 1≤n≤1000 ,元素大小满足 0≤val≤100000
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序
输出描述:
输出排好序的数字
示例1
输入:
8 1 2 4 9 3 55 64 25 0
复制输出:
1 2 3 4 9 25 55 64
复制
示例2
输入:
5 1 2 3 4 5 1
复制输出:
5 4 3 2 1
答案1
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();Integer[] nums = new Integer[n]; // 使用 Integer 类型的数组for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}int k = scanner.nextInt();if(k==0){Arrays.sort(nums);}else{Arrays.sort(nums, Collections.reverseOrder()); // 将升序排列的结果反转} for (int i = 0; i < n; i++) {System.out.print(nums[i] + " ");}}
}
详解1
本题与此题考察点一致。
华为OD机试“HJ58 输入n个整数,输出其中最小的k个”Java编程解答-CSDN博客
在Java中,
Collections.reverseOrder()
是一个静态方法,返回一个Comparator
对象,该对象可以用于对对象进行降序排序。Comparator
是一个函数式接口,用于定义对象之间的比较规则。在这种情况下,我们使用
Collections.reverseOrder()
来创建一个Comparator
对象,然后将其传递给Arrays.sort()
方法,以便对数组进行降序排序。这意味着在排序数组时,比较器会将较大的元素排在前面,较小的元素排在后面。总结一下,
Collections.reverseOrder()
返回一个降序比较器,用于对数组或集合进行降序排序。
答案2
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 数组元素个数int[] arr = new int[n]; // 创建数组// 输入待排序的数组for (int i = 0; i < n; i++) {arr[i] = scanner.nextInt();}int sortFlag = scanner.nextInt(); // 排序标识,0代表升序,1代表降序// 根据排序标识进行排序if (sortFlag == 0) {Arrays.sort(arr); // 升序排序} else {Arrays.sort(arr); // 先进行升序排序reverse(arr); // 然后反转数组,实现降序排序}// 输出排序后的数组for (int num : arr) {System.out.print(num + " ");}}// 反转数组private static void reverse(int[] arr) {int start = 0;int end = arr.length - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}
}
详解2
自己写reverse函数进行反转,将升序改为降序。