27 de octubre de 2010

Metodos de Ordenamiento en C/C++ (Parte 1)

Espero que sea de gran ayuda este codigo, es largo pero la verdad muy didactico donde compara el tiempo de ejecuion de cada metodo. Voy a tratar de subirlo a mi cuenta de 4Share para que puedan descargarlo. Cual quier otra pregunta sobre programacion, iphone, ipod. escriban aqui o en mi twitter.
Dentro de poco subire tutoriales sobre jailbreak, unlock..

Por la extension voy a dividir este post en 3:




#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define Max 10000
using namespace std;
void leerVectorEspecial(int X[Max],int *dimf);
void mostrarVector(int X[Max],int dimX);

int burbuja1(int X[Max],int dimX);
int burbuja2(int X[Max],int dimX);
int burbujaConSenal(int X[Max],int dimX);
int sacudida(int X[Max],int dimx);
int ordenxinserdirec(int X[Max],int dimX);
int ordenxinserxbinar(int X[Max],int dimX);
int seleccion(int X[Max],int dimX);
int shell(int X[Max],int dimX);
int reducerrecursivo (int INI, int FIN,int A[Max]);
int reduceiterativo(int INI,int FIN,int *POS,int X[Max]);
int rapidoiterativo(int X[Max],int N);
int monticulo(int X[Max],int dimX);
int insertaMonticulo(int X[Max],int dimX);
int eliminaMonticulo(int X[Max],int dimX);
int main()
{
   int A[Max],nf,opc;
      textbackground(8);//color de resalte de las letras
      textcolor(1);//color de letra
      clrscr();//hace que toda la pantalla tome el colo de resalte de las letras
      gotoxy(18,2);//ubica el titulo en el centro de la ventana
      printf("|*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-|");
      gotoxy(18,3);
      printf("     *---->Tipos de Ordenamiento Directo<----*");
      gotoxy(18,4);
      printf("|*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-|\n\n");
      leerVectorEspecial(A,&nf);
      mostrarVector(A,nf);
      printf("_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-\n");
      printf("\nOPCIONES DE ORDENAMIENTO:\n\n");
      printf("\t <> Burbuja 1---------------<1>\n");
      printf("\t <> Burbuja 2---------------<2>\n");
      printf("\t <> Burbuja con Se¤al-------<3>\n");
      printf("\t <> Burbuja con Sacudida----<4>\n");
      printf("\t <> Insercion Directa-------<5>\n");
      printf("\t <> Insercion Binaria-------<6>\n");
      printf("\t <> Seleccion Directa-------<7>\n");
      printf("\t <> Shell-------------------<8>\n");
      printf("\t <> Quicksort Recursivo-----<9>\n");
      printf("\t <> Quicsort Iterativo------<10>\n");
      printf("\t <> Monticulo---------------<11>\n");
      printf("\t <> Salir-------------------<12>\n");
      printf("-->Ingrese la opcion que desee: ");
      scanf("%d",&opc);
      switch (opc){
         case 1:
            printf("\n--------->M.O.D Burbuja 1\n");
            burbuja1(A,nf);
            mostrarVector(A,nf);
            break;
         case 2:
            printf("\n--------->M.O.D Burbuja 2\n");
            burbuja2(A,nf);
            mostrarVector(A,nf);
            break;
         case 3:
            printf("\n--------->M.O.D. Burbuja con Se¤al\n");
            burbujaConSenal(A,nf);
            mostrarVector(A,nf);
            break;
         case 4:
            printf("\n--------->M.O.D Burbuja con Sacudida\n");
            sacudida(A,nf);
            mostrarVector(A,nf);
            break;
         case 5:
            printf("\n--------->M.O.D Insercion Directa \n");
            ordenxinserdirec(A,nf);
            mostrarVector(A,nf);
            break;  
         case 6:
            printf("\n--------->M.O.D Insercion Binaria\n");
            ordenxinserxbinar(A,nf);
            mostrarVector(A,nf);
            break;  
         case 7:
            printf("\n--------->M.O.D Seleccion directa \n");
            seleccion(A,nf);
            mostrarVector(A,nf);
            break;
         case 8:
            printf("\n--------->M.O.D Shell\n");
            shell(A,nf);
            mostrarVector(A,nf);
            break;
         case 9:
            printf("\n--------->M.O.D Quicksort Recursivo\n");
            reducerrecursivo (0,nf,A);
            mostrarVector(A,nf);
            break;  
         case 10:
            printf("\n--------->tM.O.D Quicksort Iterativo\n");
            rapidoiterativo(A,nf);
            mostrarVector(A,nf);
            break;
         case 11:
            printf("\n--------->M.O.D. Monticulo \n");
            monticulo(A,nf);
            mostrarVector(A,nf);
            break;
         case 12:
            exit(1);
         default:
            printf("Numero Invalido\n");
      }    
   return 0;
   system("pause");
}

void leerVectorEspecial(int X[Max],int *dimX)
{
   int i, N;
   srand(time(0));
   printf("-->Ingrese el tama¤o del Vector a ordenar:  ");
   scanf("%d",&N);
   for(i=0;i<N;i++){
      X[i]=rand()%1000;
   }
   *dimX=N;
}

void mostrarVector(int X[Max],int dimX)
{
   int i,val;
   printf("\n\t-*-*-*-*-*-**-*-*-*->Vector sin ordenar<-*-*-*-*-*-*-*-*-*-*-*-*- \n\n");
   for(i=0;i<dimX;){
      if(i<9){
         val=X[i];
         printf("|->[%d]=%7d\t",i+1,val);
      }
      if(i>8 && i<99){
         val=X[i];
         printf("|->[%d]=%6d\t",i+1,val);
      }
      if(i>98&&i<999){
         val=X[i];
         printf("|->[%d]=%5d\t",i+1,val);
      }
      if(i>998&&i<9999){
         val=X[i];
         printf("|->[%d]=%4d\t",i+1,val);
      }
      if(i>9998&&i<99999){
         val=X[i];
         printf("|->[%d]=%3d\t",i+1,val);
      }
      if(i>99998&&i<999999){
         val=X[i];
         printf("|->[%d]=%2d\t",i+1,val);
      }
      i=i+1;    
   }
      printf("\n");
      getch();
      printf("--->Presione una tecla para continuar<---");
}
//-->1
  

No hay comentarios.:

Publicar un comentario