Logo Revista Java

startjavaabout

articles

00. Prólogo (java)
01.a TEMAS INTRODUCTORIOS. (java)
01.b Comandos que Inician la Máquina de Java y la salida de texto (java)
01.c Descripción empírica de la Programación Orientada a Objetos con Java. (java)
01.d Herencia Soportada por Java y Tipos de Datos Básicos. (java)
01.e Operadores, Delimitadores Básicos Y los nombres de función Válidos. (java)
02.a Codificación Inicial y Estructuras de Datos. (java)
02.b Paquetes, y Palabras clave, (Reservadas) (java)
02.c Tipos de Datos, y declaraciones de funciones, Tablas. (java)
02.d Bucles y Tomas de decisión, Excepciones y Control de Errores. (java)
02.e Secuencias de Escape (java)
02.f Concatenación y Conversiones a Texto. (java)
02.g Métodos de Entrada y Salida de datos (java)
02.h Crear Objetos de la biblioteca de Java (java)
02.i Ejercicio: Entrada de Datos y Conversiones (if, try, catch) (java)
02.j Ejercicios, usando excepciones y while, y switch (java)
02.k Práctica complementaria Resuelta sin Arreglos. (java)
02.l Ejercicios de la práctica complementaria (java)
02.m Práctica complementaria resuelta Ej 6 y 7 (java)
02.m Práctica complementaria resuelta Ej 8 y 9 (java)
03.a Métodos estáticos y mecanismos de programación (java)
03.b Arreglos (Arrays o Vectores) (java)
03.c La clase Math como ayudante para resolver problemas (java)
03.d Usando arreglos para un buffer, colas de espera, pilas y listas. (java)
03.e Implementación del buffer tipo FIFO (Cola de espera, el primero es primero en salir) (java)
03.f Implementación del buffer tipo FIFO (Cola de espera, el primero es primero en salir) 2da parte (java)
03.g Implementación del buffer tipo LIFO (La pila, último en llegar es primero en salir) (java)
03.h Implementación del buffer tipo LIFO (La pila, último en llegar es primero en salir) 2da parte (java)
03.i Implementación de una Lista de datos. (java)
03.j Búsqueda Secuencial dentro de la lista de datos. (java)
03.k Búsqueda Aleatoria dentro de la lista de datos. (java)
03.l Búsqueda binaria dentro de una lista ordenada de datos. (java)
03.m Método para Ordenar - La Burbuja (java)
03.n Método para Ordenar - QuickSort Recursivo (java)
03.o Ejercicios Resueltos, ordenar con Java (java)
04.a Nuestro primer Objeto en Java (java)
04.b Codificación del primer Objeto en Java (java)
El método más rápido de los sencillos para ordenar una lista de datos.

03.n Método para Ordenar - QuickSort Recursivo

(2351)
El método más rápido de los sencillos para ordenar una lista de datos.
contact
Created,Modified
2009-04-10 08:34:53, 2009-05-07 19:13:30
Author,Nick
Gustavo Guillermo Perez, (madgus) [myblog]

Método QuickSort Recursivo

Este método para ordenar, es recursivo, si entendimos el ejemplo anterior, pudimos ver que la ejecución del algoritmo era secuencial, es decir 1 sola función hizo todo el trabajo en si misma.

Este algoritmo implementa la división en dos grupos del arreglo a ordenar y por lo tanto la misma operación se realiza con cada subgrupo que a su vez se vuelve a dividir, y como es la misma operación se llama a la misma función varias veces.

Esto tiene una desventaja, la plataforma que corre nuestra implementación debe producir una interrupción del proceso de ejecución para llamar a otra función, esto no tiene nada de malo excepto que cuando sean demasiados elementos la cantidad de veces que una función llamó a la misma función que llamó a la misma función puede ser tan larga que podría producir un agotamiento de recursos que ralentice o impida la ejecución de este tipo de algoritmos, en conclusión este método es muy difícil implementarlo de manera secuencial pero la cantidad de comparaciones se reduce notablemente.{1}{2}

  1. public static void quicksort_menormayor(int[] listado,int i,int j){

  2. if (i>=j){return;}

  3. int p = dividiren_menormayor(listado,i,j);

  4. quicksort_menormayor(listado,i,p-1);

  5. quicksort_menormayor(listado,p+1,j);

  6. }//final del método principal de quicksort

  7. public static int dividiren_menormayor(int[] listado,int i,int j){

  8. int p= i; i++;

  9. while (true){

  10. while (i < j && listado[i]<=listado[p]){i++;}

  11. while (i < j && listado[j]>=listado[p]){j--;}

  12. if (i == j) break;

  13. swap(listado,i,j);

  14. }

  15. if (listado[p]<listado[i]){i--;}

  16. swap(listado,p,i);

  17. return i;

  18. }//final del método que divide y ordena


En el código de ejemplo vemos que se declararon varias funciones, la función swap hace el intercambio con la variable temporal como en el método anterior, la función dividiren es la más importante de este procedimiento, es no solo la que divide sino la que intercambia los elementos que se van ordenando. Y por supuesto quicksort se llama así misma por cada subsegmento.

Cada segmento se recorre hacia arriba y hacia abajo saltándose los menores e iguales y mayores e iguales que el elemento inferior, cuando no hay nada que saltar, se intercambian los valores de manera que quedan por encima y debajo de p los mayores y los menores.

Ahora veamos la misma función pero ordenando de mayor a menor, como podemos ver sólo cambian los signos de comparación referentes a los contenidos del listado.

  1. public static void quicksort_mayormenor(int[] listado,int i,int j){

  2. if (i>=j){return;}

  3. int p = dividiren_mayormenor(listado,i,j);

  4. quicksort_mayormenor(listado,i,p-1);

  5. quicksort_mayormenor(listado,p+1,j);

  6. }//final del método principal de quicksort

  7. public static int dividiren_mayormenor(int[] listado,int i,int j){

  8. int p= i; i++;

  9. while (true){

  10. while (i < j && listado[i]>=listado[p]){i++;}

  11. while (i < j && listado[j]<=listado[p]){j--;}

  12. if (i == j) break;

  13. swap(listado,i,j);

  14. }

  15. if (listado[p]>listado[i]){i--;}

  16. swap(listado,p,i);

  17. return i;

  18. }//final del método que divide y ordena

Otros mecanismos para ordenar.

Existen otros mecanismos que no podemos tratar en este momento porque es necesario implementar objetos, así que ese será el próximo tema, algunos son, por inserción, por fusión, de shell y con un árbol binario.


leavecomment

*Hasta que esta leyenda no desaparezca el libro no ha sido terminado, descarge en pdf:

http://compunauta.com/forums/linux/programacion/java/ebook.html




Aprendiendo Java - Ejemplos resueltos, Ejercicios, prácicas y técnicas de programación con Java #1 - ezine - ©Compunauta - myblog - Anuncios - 1072