算法训练 景点游览(快速排序)
问题描述
小明来到一个景区游玩,但是他的时间有限,没办法逛遍所有的景点,所以他从网上下载了每个景点的评分,
他希望能够使游览的景点的评分总和最高,于是他希望你帮他对于N个景点排下序。
输入格式
输入的第一行包含一个正整数N,表示N个景点。
第二行有N个正整数,表示每个景点的评分值。
输出格式
输出一行,包含N个正整数,表示N个景点的评分从大到小的排列
样例输入
4
3 2 4 1
样例输出
4 3 2 1
数据规模和约定
N<=1000,每个景点的评分<=10000。
import java.util.Scanner;
public class ALGO_217_1 {
/**
* @param args
* 快速排序:寻找基数,比基数小的放在右边,比基数打的放在左边;更改基数
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int[] a=new int[N];
for(int i=0;i<N;i++){
a[i]=sc.nextInt();
}
//int[] a=new int[]{3,5,7,2,6,1,3,8,4};
//快速排序
//1.找一个基数,以第一个为标准,一次和他比较,大的放在左边
quicksort(a,0,a.length-1);
pt(a);
}
public static void quicksort(int[] arry,int l,int r){
if(l>=r){
return;
}
int low=l;
int height=r;
int key=arry[low];
while(low<height){
//从高处找
for(;;height--){
if(height<=low){
break;
}
if(arry[height]>key){
arry[low]=arry[height];
break;
}
}
//从低处找
for(;;low++){
if(height<=low){
break;
}
if(arry[low]<key){
arry[height]=arry[low];
break;
}
}
}
if(low==height){
arry[low]=key;
}
//pt(arry);
quicksort(arry,l,low-1);
quicksort(arry,low+1,r);
}
public static void pt(int[] arry){
for(int i:arry){
System.out.print(i+" ");
}
}
}