Está en la página 1de 5

FUNDAMENTOS DE PROGRAMACION II

METODOS DE ORDENACION DE VECTORES C++ 1. ORDENACIN POR SELECCIN DESCRIPCIN (PASOS PARA EL ALGORITMO) Buscas el elemento ms pequeo de la lista. Lo intercambias con el elemento ubicado en la primera posicin de la lista. Buscas el segundo elemento ms pequeo de la lista. Lo intercambias con el elemento que ocupa la segunda posicin en la lista. Repites este proceso hasta que hayas ordenado toda la lista. ANLISIS DEL ALGORITMO Al igual que el ordenamiento burbuja, este algoritmo slo necesita una variable adicional para realizar los intercambios. El ciclo externo se ejecuta n veces para una lista de n elementos. Cada bsqueda requiere comparar todos los elementos no clasificados. UN EJEMPLO: Consideremos un vector A con 5 valores enteros: A= [5, 2, 4, 8, 3]: 2. ORDENACION POR INSERCIN DIRECTA DESCRIPCIN (PASOS PARA EL ALGORITMO) El algoritmo de ordenacin por el mtodo de insercin directa es un algoritmo relativamente sencillo y se comporta razonablemente bien en gran cantidad de situaciones. Completa la tripleta de los algoritmos de ordenacin ms bsicos y de orden de complejidad cuadrtico, junto con Selection Sort y BubbleSort (burbuja). Se basa en intentar construir una lista ordenada en el interior del vector a ordenar. De estos tres algoritmos es el que mejor resultado da a efectos prcticos. Realiza una cantidad de comparaciones bastante equilibrada con respecto a los intercambios, y tiene un par de caractersticas que lo hacen aventajar a los otros dos en la mayor parte de las situaciones. Este algoritmo se basa en hacer comparaciones, as que para que realice su trabajo de ordenacin son imprescindibles dos cosas: un vector o estructura similar de elementos comparables y un criterio claro de comparacin, tal que dados dos elementos nos diga si estn en orden o no. En cada iteracin del ciclo externo los elementos 0 a i forman una lista ordenada. ANLISIS DEL ALGORITMO Estabilidad: Este algoritmo nunca intercambia registros con claves iguales. Por lo tanto es estable.

FUNDAMENTOS DE PROGRAMACION II
Requerimientos de Memoria: Una variable adicional para realizar los intercambios. Tiempo de Ejecucin: Para una lista de n elementos el ciclo externo se ejecuta n-1veces. El ciclo interno se ejecuta como mximo una vez en la primera iteracin, 2 veces en la segunda, 3 veces en la tercera, etc. UN EJEMPLO As el proceso en el caso de la lista de enteros A = [6, 3, 5, 9, 4] Ventajas: Fcil implementacin. Requerimientos mnimos de memoria. Desventajas: Lento. Realiza numerosas comparaciones. Este tambin es un algoritmo lento, pero puede ser de utilidad para listas que estn ordenadas o semi-ordenadas, porque en ese caso realiza muy pocos desplazamientos. 3. ORDENACIN SHELL

DESCRIPCION (PASOS PARA EL ALGORITMO) Los pasos a seguir por el algoritmo para una lista de n elementos son: 1. Dividir la lista original en n/2 grupos de dos, considerando un incremento o salto entre los elementos de n/2. 2. Clarificar cada grupo por separado, comparando las parejas de elementos, y si no estn ordenados, se intercambian. 3. Se divide ahora la lista en la mitad de grupos (n/4), con un incremento o salto entre los elementos tambin mitad (n/4), y nuevamente se clasifica cada grupo por separado. 4. As sucesivamente, se sigue dividiendo la lista en la mitad de grupos que en el recorrido anterior con un incremento o salto decreciente en la mitad que el salto anterior, y luego clasificando cada grupo por separado.

FUNDAMENTOS DE PROGRAMACION II
5. El algoritmo termina cuando se consigue que el tamao del salto es 1. ANALISIS DEL ALGORITMO El mtodo Shell es una versin mejorada del mtodo de insercin directa. Este mtodo tambin se conoce con el nombre de insercin con incrementos decrecientes. En el mtodo de ordenacin por insercin directa cada elemento se compara para su ubicacin correcta en el arreglo, con los elementos que se encuentran en la parte izquierda del mismo. Si el elemento a insertar es ms pequeo que el grupo de elementos que se encuentran a su izquierda, es necesario efectuar entonces varias comparaciones antes de su ubicacin. Shell propone que las comparaciones entre elementos se efecten con saltos de mayor tamao pero con incrementos decrecientes, as , los elementos quedarn ordenados en el arreglo ms rpidamente. El Shell sort es una generalizacin del ordenamiento por insercin, teniendo en cuenta dos observaciones: 1. El ordenamiento por insercin es eficiente si la entrada est casi ordenada".2. El ordenamiento por insercin es ineficiente, en general, porque mueve los valores slo una posicin cada vez. El algoritmo Shell sort mejora el ordenamiento por insercin comparando elementosseparados por un espacio de varias posiciones. Esto permite que un elemento haga pasos ms grandes" hacia su posicin esperada. Los pasos mltiples sobre los datos se hacen con tamaos de espacio cada vez ms pequeos. El ltimo paso del Shell sort es un simple ordenamiento por insercin, pero para entonces, ya est garantizado que los datos del vector estn casi ordenados. UN EJEMPLO Obtener las secuencias parciales del vector al aplicar el mtodo Shell para ordenar en orden creciente la lista: 6 1 5 2 3 4 0 El nmero de elementos que tiene la lista es 6, por lo que el salto inicial es 6/2 = 3. La siguiente Tabla muestra el nmero de recorridos realizados en la lista con los saltos correspondiente. Recorrido 1 2 3 salto 3/2 = 1 Salto 3 3 3 Intercambios (6,2),(5,4),(6,0) (2, 0) ninguno Lista 2140356 0142356 0142356

FUNDAMENTOS DE PROGRAMACION II
4 5 1 1 (4,2),(4,3) ninguno 0123456 0123456

4. ORDENACIN RPIDA (QUICKSORT) El ordenamiento por particin (Quick Sort) se puede definir en una forma ms conveniente como un procedimiento recursivo. Tiene aparentemente la propiedad de trabajar mejor para elementos de entrada desordenados completamente, que para elementos semiordenados. Esta situacin es precisamente la opuesta al ordenamiento de burbuja. Este tipo de algoritmos se basa en la tcnica "divide y vencers", osea es ms rpido y fcil ordenar dos arreglos o listas de datos pequeos, que un arreglo o lista grande. Normalmente al inicio de la ordenacin se escoge un elemento aproximadamente en la mitad del arreglo, as al empezar a ordenar, se debe llegar a que el arreglo este ordenado respecto al punto de divisin o la mitad del arreglo. Se podr garantizar que los elementos a la izquierda de la mitad son los menores y los elementos a la derecha son los mayores. Los siguientes pasos son llamados recursivos con el propsito de efectuar la ordenacin por particin al arreglo izquierdo y al arreglo derecho, que se obtienen de la primera fase. El tamao de esos arreglos en promedio se reduce a la mitad. As se contina hasta que el tamao de los arreglos a ordenar es 1, es decir, todos los elementos ya estn ordenados. En promedio para todos los elementos de entrada de tamao n, el mtodo hace O(n logn) comparaciones, el cual es relativamente eficiente. UN EJEMPLO Se ordena una lista de nmeros enteros aplicando el algoritmo quicksort, como pivote se elige el primer elemento de la lista. 1. Lista original

5 pivote elegido

FUNDAMENTOS DE PROGRAMACION II
2 1 3 sublista izquierda1 (elementos menores que 5)

7 sublista derecha1 (elementos mayores o iguales a 5)

2. El algoritmo se aplica a la sublista izquierda Sublista Izda1 pivote sublista Dcha 3 Sublista Izda1 Izda pivote Dcha 2 1 3 sublista Izda 1

3. El algoritmo se aplica a la sublista derecha Sublista Dcha1 Pivote 9 8 7 sublista Izda 7 8

sublista Dcha Sublista Dcha1 Izda pivote Dcha

4. Lista ordenada final Sublista izquierda 1 2 3 pivote 5 7 Sublista derecha 8 9