Algoritmo de ordenamiento
El ordenamiento es una labor común que realizamos
continuamente. ¿Pero te has preguntado qué es ordenar? ¿No? Es que es algo tan
corriente en nuestras vidas que no nos detenemos a pensar en ello. Ordenar es
simplemente colocar información de una manera especial basándonos en un criterio de
ordenamiento.
En la computación el ordenamiento de datos también cumple un
rol muy importante, ya sea como un fin en sí o como parte de otros
procedimientos más complejos. Se han desarrollado muchas técnicas en este
ámbito, cada una con características específicas, y con ventajas y desventajas
sobre las demás. Aquí voy a mostrarte algunas de las más comunes, tratando de
hacerlo de una manera sencilla y comprensible.
Ordenamiento Rápido (Quicksort)
Esta es probablemente la técnica más rápida conocida. Fue
desarrollada por C.A.R. Hoare en 1960. El algoritmo original es recursivo, pero
se utilizan versiones iterativas para mejorar su rendimiento (los algoritmos
recursivos son en general más lentos que los iterativos, y consumen más
recursos). El algoritmo fundamental es el siguiente:
Eliges un elemento de la lista. Puede ser cualquiera (en Optimizando veremos
una forma más efectiva). Lo llamaremos elemento de división.
Buscas la posición que le corresponde en la lista ordenada
(explicado más abajo).
Acomodas los elementos de la lista a cada lado del elemento
de división, de manera que a un lado queden todos los menores que él y al otro
los mayores (explicado más abajo también). En este momento el elemento de
división separa la lista en dos sublistas. ejm
Nombre Procedimiento: OrdRap
Parámetros:
lista a ordenar (lista)
índice inferior (inf)
índice superior (sup)
// Inicialización de variables
1. elem_div = lista[sup];
2. i = inf - 1;
3. j = sup;
4. cont = 1;
//
Verificamos que no se crucen los límites
5. if (inf >= sup)
6.
retornar;
// Clasificamos la sublista
7. while (cont)
8. while (lista[++i] < elem_div);
9.
while (lista[--j] > elem_div);
10. if (i < j)
11. temp =
lista[i];
12.
lista[i] = lista[j];
13. lista[j] =
temp;
14. else
15. cont = 0;
// Copiamos el elemento de división
// en su posición final
16. temp = lista[i];
17. lista[i] = lista[sup];
18. lista[sup] = temp;
// Aplicamos el procedimiento
// recursivamente a cada sublista
19. OrdRap (lista, inf, i - 1);
20. OrdRap (lista, i + 1, sup);
Ordenamiento por Selección
Este algoritmo también es sencillo. Consiste en lo
siguiente:
Buscas el elemento más pequeño de la lista.
Lo intercambias con el elemento ubicado en la primera
posición de la lista.
Buscas el segundo elemento más pequeño de la lista.
Lo intercambias con el elemento que ocupa la segunda
posición en la lista.
Repites este proceso hasta que hayas ordenado toda la
lista.ejm
1. for (i=0; i<TAM - 1; i++)
2. pos_men
= Menor(lista, TAM, i);
3. temp =
lista[i];
4. lista[i]
= lista [pos_men];
5. lista
[pos_men] = temp;
Ordenamiento Burbuja (Bubblesort)
Este es el algoritmo más sencillo probablemente. Ideal para
empezar. Consiste en ciclar repetidamente a través de la lista, comparando
elementos adyacentes de dos en dos. Si un elemento es mayor que el que está en
la siguiente posición se intercambian. ejm
1. for (i=1; i<TAM; i++)
2. for j=0 ; j<TAM - 1; j++)
3.
if (lista[j] > lista[j+1])
4.
temp = lista[j];
5.
lista[j] = lista[j+1];
6.
lista[j+1] = temp;
No hay comentarios:
Publicar un comentario