描述
输入整型数组和排序标识,对其元素按照升序或降序进行排序
数据范围: 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函数进行反转,将升序改为降序。