miércoles, 27 de febrero de 2013

Métodos de ordenamiento en C++.

Métodos de ordenamiento.

- 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