Está en la página 1de 3

ALGORITMOS DE ORDENAMIENTO

ALGORITMO DE ORDENAMIENTO QUICK SORT


Autor: Libardo Pantoja Y. ltima actualizacin: Octubre 26 de 2012 Este algoritmo divide en array en dos subarray, que se pueden ordenar de modo independiente. Se selecciona un elemento especfico del array arreglo[centro] llamado pivote. Luego, se debe resituar los dems elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que l, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada. Finalmente, se divide el array original en dos subarrays que se ordenarn de modo independiente mediante llamadas recursivas del algoritmo. El algoritmo implementado en java es el siguiente:
public class Ordenamiento { /** * * Este algoritmo divide en array en dos subarray, que se pueden ordenar de * modo independiente. Se selecciona un elemento especifico del array * arreglo[centro] llamado pivote y se divide el array original en dos * subarrays que se ordenaran de modo independiente mediante llamadas * recursivas del algoritmo. * * @param arreglo * arreglo que se esta ordenando * @param inicio * posicion de inicio - ORDEN(N LOG N) EN EL CASO MEDIO. * ORDEN(N*N) EN EL PEOR CASO * @param fin * posicion final */ public void quickSort(int[] arreglo, int inicio, int fin) { int i = inicio;// i siempre avanza en el arreglo hacia la derecha int j = fin; // j siempre avanza hacia la izquierda int pivote = arreglo[(inicio + fin) / 2]; do { while (arreglo[i] < pivote) // si ya esta ordenado incrementa i i++; while (pivote < arreglo[j]) // si ya esta ordenado decrementa j j--; if (i <= j) {// Hace el intercambio int aux = arreglo[i]; arreglo[i] = arreglo[j]; arreglo[j] = aux; i++; j--;

} } while (i <= j); if (inicio < j) quickSort(arreglo, inicio, j);// invocacion recursiva if (i < fin) quickSort(arreglo, i, fin);// invocacion recursiva } /** * Metodo intermediario que invoca al algoritmo quickSort recursivo * * @param arregloSinOrdenar * arreglo sin ordenar * @return arreglo ordenado */ public int[] quickSortTomaDatos(int[] arregloSinOrdenar) { int[] arreglo = darCopiaValores(arregloSinOrdenar); quickSort(arreglo, 0, arreglo.length - 1); return arreglo; } /** * * Saca una copia del vector */ public int[] darCopiaValores(int[] arreglo) { int[] arregloNuevo = new int[arreglo.length]; for (int i = 0; i < arreglo.length; i++) { arregloNuevo[i] = arreglo[i]; } return arregloNuevo; } }

El programa principal que invoca este mtodo de ordenamiento sera:


public class ClienteMain { public static void main(String[] args) { Ordenamiento o = new Ordenamiento(); int[] arreglo = { 1, 5, 7, 9, 6, 10, 3, 2, 4, 8 }; mostrar(arreglo); // Cambiar aqui por el algoritmo de ordenamiento a probar mostrar(o.quickSortTomaDatos(arreglo)); } /** * Muestra por consola todos los datos del arreglo, separados por espacio * * @param arreglo * arreglo a imprimir */ public static void mostrar(int[] arreglo) { for (int i = 0; i < arreglo.length; i++) { System.out.print(arreglo[i] + " "); } System.out.println("");

} }

Estudio de la complejidad

También podría gustarte