Después de responder esta pregunta, primero pensará en ordenar. Después de ordenar, seleccione el número K más grande. Selección de clasificación La clasificación rápida es una mejor opción.
Bien, hagamos la primera solución: clasificación rápida
El código es el siguiente.
Copie el código de código de la siguiente manera:
ordenación rápida estática pública vacía (int [] arr, int inicio, int fin) {
si (inicio <fin) {
clave int = arr[inicio];
int derecha = inicio;
int izquierda = fin;
mientras (derecha <izquierda) {
mientras (derecha < izquierda && arr[izquierda] > tecla) {
izquierda --;
}
si (derecha <izquierda) {
dirección[derecha] = dirección[izquierda];
}
while (derecha <izquierda && arr[derecha] <= tecla) {
derecha++;
}
si (derecha <izquierda) {
dirección[izquierda] = dirección[derecha];
}
}
arr[derecha] = clave;
ordenación rápida(arr, inicio, derecha-1);
ordenación rápida(arr, izquierda+1, fin);
}
}
Después de una clasificación rápida, la matriz estará en orden. La clasificación anterior es de pequeña a grande, por lo que nuestro resultado debería ser el siguiente.
Copie el código de la siguiente manera: int k = 4;
for (int i=arr.length-1; i>=arr.length-k; i--) {
System.out.println(arr[i]+" ");
}
. La primera solución ya es buena, pero ¿existe una forma mejor?
¡La respuesta es sí! Podemos elegir la clasificación parcial y luego usamos la clasificación por selección para resolver este problema.
El código es el siguiente:
Copie el código de la siguiente manera: public static int[] selectSortK(int[] arr, int k) {
if(arr == nulo || arr.length == 0) {
devolver nulo;
}
int[] nuevaArr = nuevo int[k];
List<Integer> list = new ArrayList<Integer>();//Registra el subíndice del número máximo cada vez
para (int i=0; i<k; i++) {
int maxValue = Integer.MIN_VALUE; //Valor máximo
int índice máximo = i;
for (int j=0; j<arr.length; j++) {
if (arr[j] > maxValue &&! lista.contiene(j) ) {
maxValue = arreglo[j];
índicemáx = j;
}
}
if (!list.contains(maxIndex)) {//Si no existe, agréguelo
lista.add(maxIndex);
nuevaArr[i] = maxValue;
}
}
devolver nuevaArr;
}