Sunteți pe pagina 1din 11

UNIVERSIDAD AUTONOMA METROPOLITANA -Iztapalapa-

PROGRAMACIN AVANZADA PRACTICA 9: ALGORITMOS DE ORDENAMIENTO NOMBRE: ELIZABETH LPEZ ROMERO PROFESOR: ALFONSO MARTNEZ MARTNEZ FECHA DE ENTREGA : 30 DE MARZO DE 2011

ALGORITMOS DE ORDENAMIENTO
OBJETIVOS
Conocer y entender el funcionamiento de los algoritmos de ordenamiento. Conocer las caractersticas de los algoritmos de ordenamiento. Observar la eficacia, rapidez y complejidad de los algoritmos de ordenamiento.

INTRODUCCION
Algoritmos de ordenamiento:
La ordenacin de datos consiste en la disposicin de los mismos de acuerdo a algn valor o caracterstica. Por ejemplo cada elemento de la coleccin de datos de una agenda telefnica tiene un campo nombre, un campo direccin y un camp nmero de telfono. Una coleccin de datos clasificados se puede almacenar en un archivo o una tabla. Cada elemento de una coleccin de datos se denomina registro y cada registro puede tener uno o ms campos de informacin. Los mtodos (algoritmos) de ordenacin son numerosos, por ello se debe prestar especial atencin en su eleccin. Cmo se sabe cul es el mejor algoritmo? La eficiencia es el factor que mide la calidad y el rendimiento de un algoritmo. Los mtodos de ordenacin se suelen dividir en dos grandes grupos: Directos: burbuja, seleccin, insercin.

Indirectos: Shell, ordenacin rpida (Quick Sort), Ordenacin por mezcla, Radixsort.

En el caso de listas pequeas, los mtodos directos se muestran eficientes, sobre todo porque los algoritmos son sencillos; su uso es muy frecuente. Sin embargo, en listas grandes estos mtodos se muestran ineficaces y es preciso recurrir a los mtodos avanzados.

Algoritmos iterativos: 1. Intercambio (Burbuja):

Tal vez sea el ms sencillo, ordena los elementos de una lista en orden ascendente. Este algoritmo se basa en la lectura sucesiva de la lista a ordenar. Comparando el elemento inferior de la lista con los restantes y efectuando intercambio de posiciones, cuando el orden resultante de la comparacin no sea el correcto.

Algoritmo en lenguaje natural: a. Se establece un lmite inicial = N-1 b. Iniciando con i=0, hasta el lmite establecido, se comparan a[i] con a[i+1] i. Si a[i] > a[i+1], se intercambian sus valores ii. Se pone una bandera para indicar que hubo intercambio. c. Se decrementa el lmite en uno Se repite desde el paso b hasta que el valor del lmite es cero o si no se produjo algn intercambio.

2. Insercin

El mtodo de ordenacin por insercin es similar al proceso tpico de ordenar tarjetas de nombres por orden alfabtico, que consiste en insertar un nombre en su posicin correcta dentro de una lista o archivo que ya est ordenado.

Algoritmo en lenguaje natural:

a. El primer elemento A[0] se considera ordenado; es decir, la lista inicial consta de un elemento. b. Se inserta A[1] en la posicin correcta, delante o detrs de A[0], dependiendo de que sea menor o mayor. c. Por cada bucle o iteracin i (desde i=1 hasta n-1) se explora la sublista A[i-1].. A[0] buscando la posicin correcta de insercin; a la vez se mueve hacia abajo una posicin todos los elementos mayor que el elemento a insertar A[i], para dejar vaca esa posicin. d. Insertar el elemento a la posicin correcta.

3. Shell:

Este mtodo debe su nombre a su inventor, D.L. Shell. Se suele denominar ordenacin por insercin con incrementos decrecientes. Se considera que el mtodo Shell es una mejora de los mtodos de insercin directa. En el algoritmo de insercin, cada elemento se compara con los elementos contiguos de su izquierda, uno tras otro, Si el elemento a insertar es el ms pequeo hay que realizar muchas comparaciones antes de colocarlo en su lugar definitivo.

El algoritmo de Shell modifica los saltos contiguos resultantes de las comparaciones por saltos de mayor tamao y con ello se consigue que la ordenacin sea ms rpida. Generalmente se toma como salto inicial n/2 (siendo n el nmero de elementos), luego se reduce el salto a la mitad en cada repeticin hasta que el salto es de tamao 1.

Algoritmo en lenguaje natural:

a. Dividir la lista original en n/2 grupos de dos, considerando un incremento o salto entre los elementos de n/2. b. Clarificar cada grupo por separado, comparando las parejas de elementos, y si no estn ordenados, se intercambian.

c. 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. d. 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. e. El algoritmo termina cuando se consigue que el tamao del salto sea igual a 1.

Algoritmos recursivos: 1. Intercalacin (Merge Sort):

La idea bsica de este mtodo de ordenacin es la mezcla (merge) de listas ya ordenadas. Este algoritmo sigue la estrategia tpica de los algoritmos divide y vencers. Los pasos que sigue se basan en dividir el problema de ordenar n elementos en dos sub-problemas ms pequeos, y una vez resueltos, combinar la solucin (mezclar) para as resolver el problema original. Con ms detalle: se ordena la primera mitad de la lista, se ordena la segunda mitad de la lista y una vez ordenadas su mezcla da lugar a una lista de elementos ordenada; a su vez, la ordenacin de la sub-lista mitad sigue los mismos pasos, ordenar la primera mitad, ordenar la segunda mitad y mezclar.

Algoritmo en lenguaje natural:

a. Dividir la lista en dos mitades. b. Ordenar la mitad de la izquierda. c. Ordenar la mitad de la derecha. d. Mezclar las dos mitades juntas.

2. Quick Sort:

La ordenacin rpida (quick sort) implica la seleccin de un elemento de una lista y a continuacin reordenar todos los elementos restantes en la sub-lista, de tal modo que todos los elementos que son ms pequeos que el elemento dado se ponen en una sub-lista y todos los elementos que son ms grandes que el elemento dado se ponen en una segunda lista. Por consiguiente, el mtodo elige un elemento denominado pivote y pone en una lista todos los elementos mayores que el pivote y los elementos pequeos en otra sub-lista.

Algoritmo en lenguaje natural:

a. Se selecciona algn elemento del arreglo a[ ] como pivote. b. Se recorre el arreglo desde la izquierda y mientras el elemento en turno sea menor que el pivote se continua el recorrido. El recorrido se detiene cuando el elemento en turno es mayor o igual al pivote. c. Se recorre el arreglo desde la derecha y mientras el elemento en turno sea mayor que el pivote se continua el recorrido. El recorrido se detiene cuando el elemento en turno es menor o igual al pivote. d. Si no se cruzaron los recorridos, se intercambian los elementos que se encontraban en turno en los recorridos anteriores. e. Se repite el proceso desde el paso b, a partir de la detencin de los recorridos, hasta que los recorridos se cruzan. Con esto se garantiza que todos los elemento de la izquierda del pivote son menores que este y todos los elementos a la derecha son mayores al pivote. f. Si existen elementos a la izquierda del pivote, se ordenan invocando recursivamente a ord rapido(). g. Si existen elementos a la derecha del pivote, se ordenan invocando recursivamente a ord rapido().

PROCEDIMIENTO
1. Codificacin de algoritmos de ordenamiento

A. Codificar los algoritmos iterativos de ordenamiento: Burbuja e insercin.

void Burbuja(int a[], int n){ int i,limite,aux; int indicador=1; limite=n-1; while((limite!=0)||(indicador==0)) indicador==0; for(i=0;i>=limite-1;i++){ if(a[i]>a[i+1]){ a[i]=a[i+1]; a[i+1]=aux; indicador=1; } limite=limite-1; } }

void insercion(int a[],int n){ int i,j,aux,indicador; for(i=1;i<n;i++){ indicador=1; aux=a[i]; j=i; while(indicador){ if(j==0) indicador=0; else if(aux<a[j-1]){ a[j]=a[j-1]; j=j-1;

} else indicador=0; } a[j]=aux; } } B. Codificar los algoritmos recursivos de ordenamiento: Intercalacin y Quick Sort. void merge(int a[],int b[],int izq, int der){ int mitad; if(izq<der){ mitad=(izq+der)/2; merge(a,b,izq,mitad); merge(a,b,mitad+1,der); } }

void quick(int a[],int izq,int der){ int i,j,aux,pivote,mitad; i=izq; j=der; mitad=(izq+der)/2; pivote=a[(mitad)]; do{ while(a[i]< pivote) i++; while(a[j]>pivote) j--; if(i<=j){ aux=a[i]; a[i]=a[j]; a[j]=aux; i++; j--; }

}while(i<=j); if(izq<j) quick(a,izq,j); if(i<der) quick(a,i,der); }

C. Disear y codificar un mdulo para llenar un arreglo con nmeros aleatorios de tipo entero.

void random( ){ srand(time(NULL)); for (i=0; i<MAX; i++) a[i]=rand()%10000; //Se llena el arreglo a[] con nmeros generados aleatoriamente. }

D. Disea y codifica un mdulo para copiar los elementos de un arreglo a otro. Void Copiar(){ int i; int a[5]={1,2,3,5,8}; int b[5]; //Arreglo original //Arreglo copia

for(i=0;i<5;i++){ b[i]=a[i]; } for(i=0;i<5;i++){ printf("a[%d]=%d \t\tb[%d]=%d\n",i,a[i],i,b[i]); } } E. Disear y codificar un mdulo men que permita 5 elecciones del usuario: 4 algoritmos de ordenamiento y como ltima opcin terminar. int menu(){ int n,i; char resp='0'; resp=0;

printf("\n\Algoritmos de Ordenamiento\n\n"); printf("1. Mtodo Burbuja\n"); printf("2 Mtodo Insercin\n"); printf("3. Mtodo Merge Sort\n"); printf("4. Mtodo Quick Sort\n"); printf("5. Salir\n\n"); while(resp!=5){ scanf("%c",&resp); fflush(stdin); switch(resp){ case '1': printf("Mtodo Burbuja...\n\n"); Burbuja(); break; printf("Mtodo insercin...\n\n"); Insercin(); break; printf("Mtodo Merge Sort...\n\n"); Merge(); break; printf("Mtodo Quick Sort...\n\n"); Quick(); break; printf("\nSalir del programa\n"); exit(0);

case '2':

case '3':

case '4':

default: } } }

2. Archivo de interfaz

#include <stdio.h> const MAX=1000000; void Burbuja(int a[], int n); void insercion(int a[], int n); void merge(int a[], int b[], int izq, int der); void quick(int a[], int izq, int der); void llena(int a[], int N); void copia(int a[], int b[], int n); int menu();

3. Mdulo principal

int main(){ int opc genera(); menu( ); }


4. Integracin en un proyecto. Se creo el archivo makefile para compilar desde linux, se anexan los archivos de codigo y ejecutables.

Conclusiones:

Estos algoritmos de ordenamiento nos facilitaran las cosas en algoritmos mas complejos. Es importante observar la eficacia de cada uno de ellos, el tiempo que tardan en realizar los calculos y la cantidad y tipo de algoritmo.

S-ar putea să vă placă și