Documente Academic
Documente Profesional
Documente Cultură
MÉTODOS DE ORDENAMIENTO
4 3 2 1 8 5
4 3 2 1 8 5
4 3 2 1 8 5
- En este caso, 3 es menor que cuatro; por lo tanto, intercambiamos los elementos:
3 4 2 1 8 5
- Una vez que los elementos del conjunto estén ordenados, tomamos el elemento
de la siguiente posición, lo hacemos parte del conjunto y lo ordenamos dentro de
este:
3 4 2 1 8 5
3 2 4 1 8 5
2 3 4 1 8 5
2 3 4 1 8 5
2 3 4 1 8 5
2 3 1 4 8 5
2 1 3 4 8 5
1 2 3 4 8 5
1 2 3 4 8 5
1 2 3 4 8 5
1 2 3 4 8 5
- Tomamos el último elemento, en este caso 5, y lo comparamos con el conjunto
ordenado: 5 es menor a 8, intercambiamos; 5 no es menor a 4, por lo tanto, no
intercambiamos.
1 2 3 4 8 5
1 2 3 4 5 8
1 2 3 4 5 8
4 3 2 1 8 5
Intervalo=n÷2=6÷2=3
Este intervalo será la distancia entre el primer número y el segundo número que
llamaremos p. El pivote (primer número) en este método siempre será el elemento
de la posición 0.
pivote p
4 3 2 1 8 5
Intervalo = 3
Como podemos ver, el pivote es el elemento de la posición 0, mientras que p es el
elemento que se encuentra en la posición igual a pivote + intervalo, es decir, el de
la posición 3.
Si el elemento de la posición pivote es mayor que p, entonces realizamos un
intercambio entre ambos elementos. En este caso, 4 es mayor a 1, por lo tanto,
realizamos el intercambio:
1 3 2 4 8 5
- Una vez que se haya comparado ambos números y se haya realizado o no un
intercambio, el pivote se mueve a la siguiente posición del vector, y, por lo tanto, p
también cambia. Ahora el pivote se encuentra en la posición 1 y p en la posición 4.
Comparamos: 3 es menor a 8, por lo tanto, no se realiza un intercambio:
1 3 2 4 8 5
1 3 2 4 8 5
- Ahora, p ha tomado el valor de la última posición del vector por lo que no podrá
tomar más valores, por lo tanto, decimos que ha recorrido el vector.
En este primer recorrido se ha realizado intercambios, entonces volveremos a
recorrer con el mismo intervalo hasta que no se realice ningún intercambio en el
recorrido:
1 es menor a 3. No intercambiamos:
1 3 2 4 8 5
3 es menor a 8. No intercambiamos:
1 3 2 4 8 5
2 es menor a 5. No intercambiamos:
1 3 2 4 8 5
- Una vez que no haya más elementos que intercambiar, el intervalo tomará el valor
de intervalo div 2 y volveremos a repetir el mismo proceso:
Intervalo=Intervalo÷2=3÷2=1
Ahora, nuestro intervalo es igual a 1, por lo que p es igual a pivote + 1.
Nuevamente, el pivote empieza en la posición 0, pero p ahora es 1. Comparamos:
1 3 2 4 8 5
1 2 3 4 8 5
1 2 3 4 8 5
1 2 3 4 8 5
8 es mayor a 5. Intercambiamos:
1 2 3 4 8 5
1 2 3 4 5 8
1 2 3 4 5 8
4 3 2 1 8 5
4 3 2 1 8 5
4 3 2 1 8 5
Empezamos a comparar:
4 no es menor a 1, por lo tanto, tiene que cambiarse.
5 es mayor a 1, por lo tanto, el indicador se mueve
4 3 2 1 8 5
4 3 2 1 8 5
1 no es mayor a 1, por lo tanto, tiene que cambiarse.
Como el indicador de la izquierda, así como el de la derecha tienen que
cambiarse, entonces intercambiamos los elementos de cada uno.
1 3 2 4 8 5
- Ahora que los elementos menores al pivote están del lado izquierdo y los mayores
del lado derecho, elegimos dos nuevos pivotes para cada lado del primer pivote.
Vamos a ordenar primero el lado izquierdo del pivote:
1 3 2
Nuevamente debemos ordenar al lado derecho los mayores y al lado izquierdo los
menores del pivote, que en este caso es 3:
1 3 2
1 2 3
1 2 3
8 5
5 8
1 2 3 4 5 8
izq=limite_izq;
der = limite_der;
pivote = lista[(izq+der)/2];
do{
while(lista[izq]<pivote && izq<limite_der)izq++;
while(pivote<lista[der] && der > limite_izq)der--;
if(izq <=der)
{
temporal= lista[izq];
lista[izq]=lista[der];
lista[der]=temporal;
izq++;
der--;
}while(izq<=der);
if(limite_izq<der){qs(lista,limite_izq,der);}
if(limite_der>izq){qs(lista,izq,limite_der);}
printf("\n");
quicksort(lista,size);
return 0;
}
4 3 2 1 8 5
5 4 3 2
4 3
5 2
8
1
3 4
5 2
- Una vez que todos los elementos han sido separados, vamos comparando y
ordenando en el mismo orden en el que fueron separados.
Vamos a empezar con los elementos de la izquierda:
3 4
2
2 3 4
1 8
- Ahora que tenemos ambos lados ordenados debemos unirlos, para lo cual
debemos ir comparando y ubicando los elementos como se hizo anteriormente:
8 2 3 4
1 2 3 4 5 8
int pointer_left = i;
int pointer_right = mid + 1;
int k;
int main() {
int a[100], aux[100], n, i, d, swap;
merge_sort(0, n - 1, a, aux);
return 0;
}