8

Click here to load reader

METODOS DE ORDENAMIENTO

Embed Size (px)

Citation preview

Page 1: METODOS DE ORDENAMIENTO

INSTITUTO TECNOLOGICO SUPERIOR DE FELIPE CARRILLO PUERTO

MATERIA: UNIDAD I:

INFORME TECNICO

UNIDAD V: METODOS DE ORDENAMIENTO.

DOCENTE

ALUMNO: SEMESTRE: III GRUPO: B AULA: J-4

LUNES 10 de DICIEMBRE del año 2012

Page 2: METODOS DE ORDENAMIENTO

INTRODUCCIÓN

En el presente informe técnico presento el código de tres métodos de ordenamiento de datos. Cada uno con características propias. Son tres métodos que se utilizan para poder dar un orden a cierto grupo de datos que se encuentren almacenados dentro de un arreglo. Existen varios autores que se contradicen sobre cual de todos los métodos de ordenamiento es el mas rápido y sencillo de realizar. En la actualidad la mayoría coincide en que el método denominado Quicksort es uno de los rápidos y sencillos de realizar, pues esta basado en la técnica llamada “divide y vencerás”.

Las características de funcionamiento de cada método esta especificado en los comentarios que encontrara enseguida del código de cada método.

Cabe mencionar que solo hare referencia a tres métodos de ordenamiento, los cuales serán, el método Burbuja, el método QuickSort, -ya entes mencionado-, y el método Shell. Solo abordare estos tres ya que son estos los más utilizados para la organización de datos dentro de arreglos.

Un punto importante a tomar en cuenta es que se presentara dos programas, en el primero se presenta dos de los métodos a los que se hace mención burbuja y Shell, tendrá un menú con el que el usuario podrá decidir con que método desea que se ordene su información. Pero eso si, cada método de ordenamiento esta definido por un función al que se le llama dentro del programa principal. El segundo programa presentara el método Quicksort, que debido a la forma de su estructura se creo de manera independiente.

Todo lo anterior lo podrá observar con más detalle al estar frente al código que se presenta en este trabajo

Page 3: METODOS DE ORDENAMIENTO

METODO BURBUJA Y METODO SHELL

#include <iostream> using namespace std; int array[5]; void ingresar(); void imprimir(); void ordenamiento_burbuja(); void ordenamiento_shell(); void menu(); int i, j, op; void intercambio(int a, int b); int main(int argc, char *argv[]) { do{ menu(); switch(op){ case 1: ingresar(); cout<<"original: "; imprimir(); ordenamiento_burbuja(); cout<<"ordenado: "; imprimir(); break; case 2: ingresar(); cout<<"original: "; imprimir(); ordenamiento_shell(); cout<<"ordenado: "; imprimir(); break; case 3: cout<<"FIN DE EJECUCION"; } }while(op<3); return 0; } void menu(){ cout<<"====== MENU METODOS DE ORDENAMIENTO =======\n"; cout<<"1)Burbuja\n"<<"2)Shell\n"<<"3)Salir\n"; cout<<"Que Metodo Desea Utilizar: "; cin>>op; }

Page 4: METODOS DE ORDENAMIENTO

void ingresar(){ for(i=0;i<5;i++){ cout<<"Escriba el dato: "; cin>>array[i]; } cout<<"\n"; } void imprimir(){ for(i=0;i<5;i++){ cout<<array[i]; } cout<<"\n"; } void ordenamiento_burbuja(){ for(i=0; i<5; i++){ for(j=0; j<5; j++){ if(array[j]>array[i]) intercambio(i,j); } } cout<<"\n"; } void intercambio(int a, int b){ int aux; aux=array[a]; array[a]=array[b]; array[b]=aux; } void ordenamiento_shell(){ int intervalo,k; intervalo = 5 / 2; while (intervalo > 0) { for (i = intervalo; i < 5; i++) { j = i - intervalo; while (j >= 0){ k = j + intervalo; if (array[j] <= array[k]) j = -1; else { double temp; temp = array[j];

Page 5: METODOS DE ORDENAMIENTO

array[j] = array[k]; array[k] = temp; j -= intervalo; } } } intervalo = intervalo / 2; } }

COMENTARIO: Este programa presenta dos métodos de ordenamiento. Pero primero se crea un arreglo que consta de 5 datos que el usuario ingresa, con base a estos cinco elementos que se ingresan al azar, se prueban lo métodos de ordenamiento que en este caso son el método burbuja y el método Shell. Para que el usuario elija con que método desea ordenar el arreglo, se creo un menú. El primer método (burbuja), consiste en ordenar los datos de manera secuencial, tomando en cuanta el primer dato, si se haya un valor mas pequeño se realiza un cambio de posición, sucesivamente hasta ordenar por completo. En cuanto al Shell, divide el arreglo en dos parte y toma un valor central para evaluar cada sub-arreglo y de esta forma ordenar los datos. Al final el usuario decide que método utilizar después de ingresar sus 5 datos, se imprime el orden en el que ingreso los datos para demostrar que realmente se ordenan los datos por medio de estos métodos.

Para realizar las operaciones tanto de los ordenamiento, como el de ingresar e imprimir los valores, además de una función menú, se utilizaron funciones, a los cuales solo se tuvo que invocar dentro de la función principal main, que utiliza un switch case para dar la opción de elegir las acciones que el usuario desea realizar dentro del programa. Además la función del método burbuja utilizo una función auxiliar el cual se llamo intercambio, como se puede observar en el código.

Page 6: METODOS DE ORDENAMIENTO

METODO QUICKSORT #include <iostream> using namespace std; void quicksort(int edad[],int izq, int der ); void imprimir(int cant,int n[]); void ingresar(int cant,int n[]); int main(int argc, char *argv[]) { int edad[20],n; do{ cout<<"Cantidad de numeros a ingresar: "; cin>>n; }while(n<=0); ingresar(n,edad); quicksort(edad,0,n-1); imprimir(n,edad); return 0; } void quicksort(int edad[],int izq, int der ){ int i, j, pivote , aux; i = izq; j = der; pivote = edad[ (izq + der) /2 ]; do{ while(edad[i] < pivote) i++; while(pivote < edad[j]) j--; if( i <= j ){ aux = edad[i]; edad[i] = edad[j]; edad[j] = aux; i++; j--; } }while( i <= j ); if( izq < j ) quicksort( edad, izq, j ); if( i < der ) quicksort( edad, i, der ); }

Page 7: METODOS DE ORDENAMIENTO

void ingresar(int cant,int n[]){ int i; for(i=0;i<cant;i++) { cout<<"Ingresa numero "<<i+1<<": "; cin>>n[i]; } } void imprimir(int cant,int n[]){ int i; for(i=0;i<cant;i++) { cout<<n[i]; } }

COMENTARIO: este segundo programa se presenta el método de ordenamiento Quicksort, que es similar al método Shell pues toma un valor central del arreglo para realizar una serie de comparaciones, además va subdividiendo el arreglo en partes para realizar la comparación, lo que permite que sea mas rápido, a diferencia de los otros métodos. En este programa se da la opción de que el usuario defina el tamaño del arreglo. Un punto importante de este programa es que se utilizan funciones a los cuales se le pasan valores, con los cuales realiza el proceso de ordenamiento. En la función main solo se realizan las llamadas a las funciones tanto de ingresar los valores y ordenarlos, como el método para imprimir los datos.

Page 8: METODOS DE ORDENAMIENTO

CONCLUSIÓN

En la elaboración de estos métodos de ordenamiento, fue posible observar con más detalle los problemas que se presentan en ocasiones por no saber como poder organizar datos dentro de un arreglo. Aprender a utilizar algún método de ordenamiento nos ayuda a agilizar uno de los procesos más complejos cuando se tiene una gran cantidad de datos.

Conocer cual es el mas rápido o el mas sencillo es lo de menos, pues todos cumplen con un solo objetivo al fin de cuentas que es la de mantener organizado grupos de datos que se encuentran dentro de un arreglo, sin preocuparse por si no se ordenan adecuadamente, como sucedería si se realizara manualmente por decirlo de alguna forma.

Otra de las cosas que aprendí durante esta unidad y con este tipo de programas, es que no se necesitan grandes cantidades de código para poder lograr que un programa realice operaciones complejas, esto lo menciono por que ninguno del método con los que se trabajo era tan largo en cuanto a código.

De la misma manera hago mención del trabajo con las funciones en programas como estos. Gracias a la s funciones pude crear cada método de manera independiente dentro de un solo programa general, sin la preocupación de que si surge algún error de sintaxis seria imposible localizarlo; cosa que sucedió mucho en la escritura del código, pero como cada método tenia su propia función, si se presentaba algún error, era mas fácil de localizar y de corregir, sin tener que modificar todo el código.

De manera general, puedo decir que con cada programa que nos enseñan a como crearlo, aprendo mucho, pues cuenta con características nuevas que cada ves son mas complejas, pero que a la vez, facilitan algún proceso que en un principio pensaba era imposible facilitar. Claro ejemplo ordenar una gran cantidad de datos dentro de un arreglo, pues aunque en estos ejemplos se manejaron pocos datos, los programas se pueden adaptar sin ningún problema para cantidades de datos muchísimo mas grandes.