蓝桥杯 算法训练 ALGO-217 景点游览(快排)

算法训练 景点游览(快速排序)

问题描述
  小明来到一个景区游玩,但是他的时间有限,没办法逛遍所有的景点,所以他从网上下载了每个景点的评分,
他希望能够使游览的景点的评分总和最高,于是他希望你帮他对于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+" ");
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值