問題の説明
シャオミンは景勝地を訪ねてきましたが、時間が限られており、すべての景勝地を訪れることができないため、インターネットから各スポットのスコアをダウンロードしました。訪問したスポットの合計スコアを最高にしたいと考えているので、助けてほしいとのことです。彼はN個のアトラクションを下位にランク付けしました。
入力フォーマット
入力の最初の行には、N個の景勝地を表す正の整数Nが含まれています。
2行目には、各景勝地のスコア値を表す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);
}
}