El documento presenta el código de tres métodos de ordenamiento de datos (burbuja, quicksort y shell) y explica su funcionamiento. Incluye programas que permiten al usuario ingresar datos y ordenarlos usando estos métodos. El autor concluye que aprendió a organizar y facilitar procesos complejos a través del uso de funciones en los programas.
1. 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
2. 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
3. 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)Burbujan"<<"2)Shelln"<<"3)Salirn";
cout<<"Que Metodo Desea Utilizar: ";
cin>>op;
}
4. 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];
5. 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.
6. 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 );
}
7. 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.
8. 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.