java - por - Ordenar la matriz int en orden descendente
ordenar una matriz en java burbuja (4)
Posible duplicado:
Ordenar matrices de tipos primitivos en orden descendente
Java: ¿Cómo ordenar una matriz de flotadores en orden inverso?
¿Cómo puedo invertir una matriz int en Java?
El siguiente código ordenará la matriz en orden ascendente :
int a[] = {30,7,9,20};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
Necesito ordenarlo en orden descendente . ¿Cómo uso Comparator para hacer esto?
Por favor ayuda.
Para tipos de matriz primitivos, debería escribir un algoritmo de clasificación inversa:
Alternativamente, puede convertir su int[]
a Integer[]
y escribir un comparador:
public class IntegerComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
}
o use Collections.reverseOrder()
ya que solo funciona en tipos de matriz no primitivos.
y finalmente,
Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1);
Arrays.sort(a2, new IntegerComparator()); // OR
// Arrays.sort(a2, Collections.reverseOrder());
//Unbox the array to primitive type
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2);
Si no es una matriz grande / larga, simplemente duplícala:
for( int i = 0; i < arr.length/2; ++i )
{
temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
Guava tiene un método Ints.asList()
para crear una List<Integer>
respaldada por una matriz int[]
. Puede usar esto con Collections.sort para aplicar el Comparador a la matriz subyacente.
List<Integer> integersList = Ints.asList(arr);
Collections.sort(integersList, Collections.reverseOrder());
Tenga en cuenta que este último es una lista en vivo respaldada por la matriz real, por lo que debe ser bastante eficiente.
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
};
// option 1
Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
Arrays.sort(array, comparator);
// option 2
int[] array2 = new int[] { 1, 24, 4, 4, 345 };
List<Integer>list = Ints.asList(array2);
Collections.sort(list, comparator);
array2 = Ints.toArray(list);