Bueno pues este algoritmo al principio resulta un poco complicado de entender pero en realidad no es tan complicado.
Para comprenderlo mas facilmente mira el siguiente video:
Para comprender bien como funciona el quicksort hay tener claros estos conceptos:
Pivote: Es un numero del arreglo que tomaremos como referencia para reorganizar el arreglo de numeros y ordenarlo. En pocas palabras tomamos todos los numeros mayores que el que hayamos elegido como pivote y los colocamos a la derecha del mismo, y todos los que sean menores que este los colocamos del lado izquierdo.
Punteros izquierdo y derecho: El quicksort utiliza 2 punteros como referencia, uno izquierdo y uno derecho, normalmente cuando se ordena de menor a mayor el izquierdo simboliza el lado de números menores y el derecho los números mayores. A medida que analizamos el arreglo, los punteros se acercan el uno a otro y cuando se encuentran en una ubicación se coloca en esta el pivote y se separa el arreglo en 2 arreglos mas pequeños. Posteriormente se vuelve a aplicar el algoritmo a los arreglos mas pequeños hasta que se logre ordenar la secuencia tal y como se ha visto en el vídeo anterior.
Descarga:
Instrucciones:
La clase Ordenador posee un método que se llama quicksort, lo que hace es organizar un arregla unidimensional de menor a mayor utilizando
el algoritmo de quicksort. Para ponerlo a prueba puedes utilizar este codigo en tu metodo Main, mandando a llamar el metodo quicksort de la clase y organizando un arreglo cualquiera.
int array[] ={3,7,3,4,12,6,3,7,4};
Ordenador a = new Ordenador();
a.quicksort(array);
El programa esta diseñado para manejar datos de tipo int, por lo que solo acepta arreglos de numeros tipo entero.
Espero que te sirva, no olvides dejar tus comentarios.
/**
* Creo que algunas cosas están de más en el código
*/
public void quicksort(int [] array)
{
quicksort(array, 0, array.length-1);
}
public void quicksort(int [] vect, int izq, int der)
{
int i, d, pivote, aux;
//caso base
if (izq >= der)
return;
i = izq; d = der;
// if (izq != der)
// {
pivote = izq;
//trabajo
while (izq != der)
{//imprimirArreglo(vect//);
while (vect[der] >= vect[pivote] && izq < der)
der–;
// while (vect[izq] < vect[pivote] && izq < der)
// izq++;
if (der != izq)
{
aux = vect[der];
vect[der] = vect[izq];
vect[izq] = aux;
}
}
if (izq == der)
{
//llamadas recursivas
//quicksort(vect,i,izq-1);
quicksort(vect,izq+1,d);
}
// } else {
// return vect;
// }
}
Hola Jorge, el link de descarga está caído, ¿podrías resubirlo por favor?
Muchas gracias,me ayudo mucho muy buena explicacion
oye el codigo no se puede descargar que onda m lo puedes enviar porfa
pana necesito el código el enlace de descarga esta caído por favor podrías enviármelo al mail o renovar el enlace??.
La web de descarga da error…una pena ya que el que yo tengo no se cómo invocarlo, deberia de ser facil porque lo tengo como metodo estatic…pero no se meimprime nada por pantalla como en el ejemplo de ti vide y no es solo el código lo que hace falta sino saber si necesita algun bucle mas para que repase varias veces el array hasta que salga ordenado…Un saludo
oye amigo rodrigo nesesito una ayuda en programar un software para resolver estadistica si podes responderme a mi twiter seria chido gracias
amigo como puedo implementar este metodo de ordenamiento en el mismo lenguaje a una base de datos sql y que por ejemplo ordene por nombre de a hasta la z
compadre como se implementaria este metodo de ordenamiento en el mismo lenguaje a una base de datos sql
amigo el link no sirve amigo podrias enviarmelo por correo o montr el link nuevo por favor gracias amigo
hey loco el enlace de descarga no funciona si puedes hacer el favor de montarlo de nuevo o mandármelo por correo se lo agradecería
grxs me sirvio mucho