Tour de atracciones de entrenamiento de algoritmos
Descripción del problema
Xiao Ming vino a visitar un lugar pintoresco, pero su tiempo es limitado y no puede visitar todos los lugares escénicos. Por lo tanto, descargó la puntuación de cada lugar de Internet. Espera hacer que la puntuación total de los lugares visitados sea la más alta, por lo que quiere que lo ayudes Clasificó las atracciones N en el orden más bajo.
Formato de entrada
La primera línea de entrada contiene un número entero positivo N, que representa N lugares escénicos.
Hay N números enteros positivos en la segunda línea, que representan el valor de puntuación de cada lugar escénico.
Formato de salida
Genere una línea que contenga N números enteros positivos, lo que indica que las puntuaciones de N lugares escénicos están organizadas en orden descendente
Entrada de muestra
4
3 2 4 1
Salida de muestra
4 3 2 1
Tamaño de datos y convención
N <= 1000, la puntuación de cada lugar escénico <= 10000.
Implementación de algoritmos
Esta pregunta usa el tipo rápido de revisión mágica, establece el centinela, coloca el grande a la izquierda y el pequeño a la derecha, puedes conseguirlo.
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);
}
}