- Burbuja simple, burbuja mejorada, por inserción, selección, shell y mezcla
A continuación se muestra la recopilación de algunos métodos de ordenamiento, cabe mencionar que hemos hecho un conjunto de ellos, y así poderlos seleccionar mediante un submenú.
Obtenga su conclusión de cual de ellos le satisface mejor sus expectativas.
#include <cstdlib>
#include <iostream> #define MAX 100 using namespace std; //métodos. void burbuja(int a[],int n); void burbujam(int a[],int n); void mezc(int a[],int b[],int c[],int m,int n); void insercion(int a[],int n); void seleccion(int a[],int n); void shell(int a[],int n); int numelem(); void tipocap(int a[],int n); void captura(int a[],int n); void capinsercion(int a[],int n); void caleat(int a[],int n); void ver(int a[],int n); char menu(); int mcap(); //Principal. int main(){ int a[MAX],b[MAX],c[MAX],n,m,k; int salir=0; do { switch(menu()){ case 'a': case 'A': n=numelem(); tipocap(a,n); cout << "\n.:: Su Arreglo ::.\n"; ver(a,n); cout << "\n\nPresione Cualquier Tecla, "; cout << "Para Comenzar Ordenamiento..."; cin.get(); burbuja(a,n); cout << "\n\n---------- Arreglo ordenado --------\n"; ver(a,n); cin.get(); break; case 'b': case 'B': n=numelem(); tipocap(a,n); cout << "\n.:: Su Arreglo ::.\n"; ver(a,n); cout << "\n\nPresione Cualquier Tecla, "; cout << "Para Comenzar Ordenamiento..."; cin.get(); burbujam(a,n); cout << "\n\n---------- Arreglo ordenado ----------\n"; ver(a,n); cin.get(); break; case 'c': case 'C': n=numelem(); capinsercion(a,n); cout << "\n\n---------- Arreglo ordenado ----------\n"; ver(a,n); cin.get(); break; case 'd': case 'D': n=numelem(); tipocap(a,n); cout << "\n.:: Su Arreglo ::.\n"; ver(a,n); cout << "\n\nPresione Cualquier Tecla, "; cout << "Para Comenzar El Ordenamiento..."; cin.get(); seleccion(a,n); cout << "\n\n---------- Arreglo ordenado ----------\n"; ver(a,n); cin.get(); break; case 'e': case 'E': n=numelem(); tipocap(a,n); cout << "\n.:: Su Arreglo ::.\n"; ver(a,n); cout << "\n\nPresione Cualquier Tecla, "; cout << "Para Comenzar El Ordenamiento..."; cin.get(); shell(a,n); cout << "\n\n---------- Arreglo ordenado ----------\n"; ver(a,n); cin.get(); break; case 'f': case 'F': cout << "Arreglo N1: \n"; cin.get(); m=numelem(); tipocap(a,m); cout << "Arreglo N1: \n"; ver(a,m); cout << "Ordenando Arreglo N1: \n"; cin.get(); seleccion(a,m); ver(a,m); cout << "\nArreglo N2: \n"; cin.get(); n=numelem(); tipocap(b,n); cout << "\nArreglo N2: \n"; ver(b,n); cout << "\nOrdenando Arreglo N2: \n"; cin.get(); seleccion(b,n); ver(b,n); cout << "\nMezclando..."; mezc(a,b,c,m,n); cin.get(); cout << "\nArreglos Mezclados."; cin.get(); cout << "\nOrdenado por el Metodo de Mezcla.\n"; k=m+n; ver(c,k); cin.get(); break; case 's': case 'S': salir=1; break; default: cout << "Opcion No Valida."; cin.get(); break; } }while(salir!=1); return 0; } //Funciones de Prototipos. void tipocap(int a[],int n){ switch(mcap()){ case 1: captura(a,n); break; case 2: caleat(a,n); break; } } void capinsercion(int a[],int n){ int i; for(i=0;i<n;i++){ a[i]=20000; } for(i=0; i<n; i++) { cout << "Elemento: " << i+1 << " = "; cin >> a[i]; insercion(a,n); } } char menu(){ char opc; cout << "Menu de Metodos de Ordenamiento.\n\n"; cout << "a) Burbuja Simple.\nb) Burbuja Mejorada.\n"; cout << "c) Insercion.\nd) Seleccion.\ne) Shell.\n"; cout << "f) Mezcla.\ns) Salir.\n\nMetodo a Utilizar: "; fflush(stdin); cin >> opc; return(opc); } int mcap(){ int cap; cout << "\n <<<<<<<<<< Modo de Captura >>>>>>>>>>\n"; cout << "1) Manual.\n2) Aleatoria.\n"; cout << "\nCaptura de forma: "; cin >> cap; return(cap); } int numelem(){ int elems; cout << "Numero de elementos: "; cin >> elems; return(elems); } void captura(int a[],int n){ int i; for(i=0;i<n;i++) { cout << "Elemento: " << i+1 << " = "; cin >> a[i]; } } void caleat(int a[], int n){ int i; random(); for(i=0;i<n;i++) { a[i]=(random()%100); } } void ver(int a[], int n){ int i; for(i=0;i<n;i++) { cout << "\nElemento "<< i+1 <<" = " << a[i]; } cin.get(); } void burbuja(int a[],int n) { int i,j,k=0,aux; for(i=0;i<=n;i++) { cout << "\n Pasada No: " << k; k++; for(j=0;j<n-i;j++) { if(a[j]>a[j+1]) { aux=a[j]; a[j]=a[j+1]; a[j+1]=aux; } cout << "\n"; ver(a,n); } } } void burbujam(int a[],int n){ int i,j=0,band=1,aux; while(j<n && band==1){ band=0; for(i=0;i<n;i++){ if(a[i]>a[i+1]){ aux=a[i]; a[i]=a[i+1]; a[i+1]=aux; band=1; } } cout << "\n Pasada No: " << j; ver(a,n); j++; } } void insercion(int a[],int n){ int i,j,aux; for(i=1; i<n; i++){ j=i; aux=a[i]; while(j>0 && aux<a[j-1]){ a[j]=a[j-1]; j--; } a[j]=aux; } cout << "Los Elementos son:\n "; for(j=0; j<n; j++) { cout << "\n = "<< a[j]; cin.get(); } } void seleccion(int a[],int n){ int i=0,j=0,x=0,im,aux; for(i=0;i<n-1;i++){ x++; im=i; for(j=i+1;j<n;j++){ if(a[j]<a[im]){ im=j; } } aux=a[i]; a[i]=a[im]; a[im]=aux; cout << "\n Pasada No : " << x; ver(a,n); } } void shell(int a[],int n){ int inter=(n/2),x=0,i=0,j=0,k=0,aux; while(inter>0){ for(i=inter;i<n;i++){ x++; j=i-inter; while(j>=0){ k=j+inter; if(a[j]<=a[k]){ j--; } else{ aux=a[j]; a[j]=a[k]; a[k]=aux; j=j-inter; } } cout << "\n Pasada No : " << x; ver(a,n); } inter=inter/2; } } void mezc(int x[],int y[],int z[],int m,int n){ int i=0,j=0,k=0; while((i<=m)&&(j<n)){ if(x[i]<=y[j]){ z[k]=x[i]; i++; } else{ z[k]=y[j]; j++; } k++; } if(i!=m){ do{ z[k]=x[i]; k++; i++; } while(i<=m); } else { do{ z[k]=y[j]; k++; j++; } while(j<=n); } }
No hay comentarios:
Publicar un comentario