Tema: Arreglos
Pregunta: ¿Cómo ordenar un arreglo MUY GRANDE de enteros y que no demore demasiado?
Respuesta: Utilizando un ordenamiento rápido ó QuickSort.
Por ejemplo:
Código PHP:
//
public int[] quicksort(int arreglo[], int inicial, int finaliza) {
int inferior = inicial;
int superior = finaliza;
int posicion = inicial;
boolean continuar = true;
while (continuar) {
continuar = false;
while ((arreglo[posicion] <= arreglo[superior])
&& (posicion != superior)) {
superior--;
}
if (posicion != superior) {
int temporal = arreglo[posicion];
arreglo[posicion] = arreglo[superior];
arreglo[superior] = temporal;
posicion = superior;
while ((arreglo[posicion] >= arreglo[inferior])
&& (posicion != inferior)) {
inferior++;
}
if (posicion != inferior) {
continuar = true;
temporal = arreglo[posicion];
arreglo[posicion] = arreglo[inferior];
arreglo[inferior] = temporal;
posicion = inferior;
}
}
}
if ((posicion - 1) > inicial) {
quicksort(arreglo, inicial, posicion - 1);
}
if (finaliza > (posicion + 1)) {
quicksort(arreglo, posicion + 1, finaliza);
}
return arreglo;
}
Esto sirve para cualquier arreglo, pero se recomienda para los muy grandes. inicial y finaliza son los límites y arreglo, pues el arreglo a ordenar. Esto ordena de menor a mayor.
Se puede hacer también utilizando los métodos de la clase Arrays del SDK... por ejemplo:
Código PHP:
//
Arrays.sort(arreglo);
donde arreglo puede ser un arreglo de byte, char, double, float, int, long, short, Object...
Hasta la vista!!