Algoritmo de Ordenación QuickSort
Por tanto, dado un vector V de N elementos, el método de ordenación aplicará los siguientes pasos básicos:
- Se elige un elemento como pivote.
- Si el tamaño del vector es 1, está ordenado. En caso contrario se divide el vector en 2 vectores, V1 y V2, de forma que los elementos de V1 sean menores (o iguales, si hay valores repetidos) que los de V2.
- Se ordenan V1 y V2 aplicando QuickSort.
- Se devuelve la concatenación de V1 y V2, obteniendo el vector V ordenado.
PSEUDOCÓDIGO
MÓDULO ordenacion_rapida
DATOS
PARÁMETROS
Transforma V() de tipo T
Recibe IZQ entera
Recibe DER entera
VARIABLES
I, J enteras
PIVOTE, AUX de tipo T
INICIO
I ← IZQ
J ← DER
PIVOTE ← V((IZQ+DER)\2) ** división entera
Mientras ( I ≤ J ) hacer
Mientras ( V(I) < PIVOTE ) hacer
I ← I+1
fin-mientras
Mientras ( V(J) > PIVOTE ) hacer
J ← J-1
fin-mientras
Si ( I ≤ J ) entonces
AUX ← V(I)
V(I) ← V(J)
V(J) ← AUX
I ← I + 1
J ← J - 1
fin-si
fin-mientras
Si ( IZQ < J ) entonces
ordenacion_rapida(V, IZQ, J)
fin-si
Si ( DER > I ) entonces
ordenacion_rapida(V, I, DER)
fin-si
FIN
CÓDIGO C
/*Ordena un vector (de menor a mayor) por el método de quickSort
**Nota: Utiliza Divide y vencerás */
quickSort(int *v, int izq, int der)
{
int i, j, pivo, aux;
i=izq;
j=der;
pivo=v[(izq+der)/2];
while(i<=j)
{
while(v[i]pivo)
{
j=j-1;
}
if(i<=j)
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
i=i+1;
j=j-1;
}
}
if(izqi)
{
quickSort(v,i,der);
}
}
Comentarios
Publicar un comentario