- 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