问题描述
小明来到一个景区游玩,但是他的时间有限,没办法逛遍所有的景点,所以他从网上下载了每个景点的评分,他希望能够使游览的景点的评分总和最高,于是他希望你帮他对于N个景点排下序。
输入格式
输入的第一行包含一个正整数N,表示N个景点。
第二行有N个正整数,表示每个景点的评分值。
输出格式
输出一行,包含N个正整数,表示N个景点的评分从大到小的排列
样例输入
4
3 2 4 1
样例输出
4 3 2 1
数据规模和约定
N<=1000,每个景点的评分<=10000。
算法实现
此题使用魔改版的快速排序,设置哨兵,把大的放左边,小的放右边,即可得。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
quickSort(nums,0,n-1);
for (int num: nums) {
System.out.print(num + " ");
}
scanner.close();
}
/**
* 快速排序 从大到小
* @param nums
* @param left
* @param right
*/
public static void quickSort(int[] nums,int left,int right){
if(left >= right) return;
int point = nums[left];
int i = left;
int j = right;
while(i < j){
while (i < j && nums[j] <= point) j--;
nums[i] = nums[j];
while (i < j && nums[i] >= point) i++;
nums[j] = nums[i];
}
nums[j] = point;
quickSort(nums,left,j-1);
quickSort(nums,j+1,right);
}
}