Sunteți pe pagina 1din 11

Algoritmos y Estructura de Datos 2

UPN Cajamarca

Ing. Sistemas

Implementacin de Algoritmos de Ordenacin y Bsqueda Interna

A continuacin presento la implementacin de algunos algoritmos de Ordenacin y Bsqueda Interna. Nota: la implementacin fue desarrollada en Dev-cpp (http://www.bloodshed.net/dev/devcpp.html). Se ha hecho uso de archivos cabecera (headers, archivos .h), para cada uno de los algoritmos para un mejor entendimiento. Veamos entonces: En: burbuja.h
void burbuja_menor(int A[], int N) { int aux=0,i=0,j=0; for(i=1;i<N;i++) { for(j=N-1;j>=i;j--) { if(A[j-1]>A[j]) { aux=A[j-1]; A[j-1]=A[j]; A[j]=aux; } } } reportar(A,N); }

void burbuja_mayor(int A[], int N) { int aux=0,i=0,j=0; for(i=N-1;i>0;i--) { for(j=0;j<i;j++) { if(A[j]>A[j+1]) { aux=A[j]; A[j]=A[j+1]; A[j+1]=aux; } } } reportar(A,N); }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


void burbuja_con_senal(int A[], int N) { int aux=0,i=0,j=0; bool band=false;

UPN Cajamarca

Ing. Sistemas

while((i<=N-1)&& (band==false)) { band=true; for(j=0;j<N-1;j++) { if(A[j]>A[j+1]) { aux=A[j]; A[j]=A[j+1]; A[j+1]=aux; band=false; } } i++; } reportar(A,N); }

void sacudida(int A[], int N) { int i=0, izq=1, der=N-1, k=N-1, aux=0; while(der>=izq) { for(i=der;i>=izq;i--) { if(A[i-1]>A[i]) { aux=A[i-1]; A[i-1]=A[i]; A[i]=aux; k=i; } } izq=k+1; for(i=izq;i<=der;i++) { if(A[i-1]>A[i]) { aux=A[i-1]; A[i-1]=A[i]; A[i]=aux; k=i; } } der=k-1; } reportar(A,N); }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


En: insercin.h
void insercion_directa(int A[], int N) { int i=0,aux=0,k=0; for(i=1;i<=N-1;i++) {

UPN Cajamarca

Ing. Sistemas

aux=A[i]; k=i-1; while((k>=0)&&(aux<A[k])) { A[k+1]=A[k]; k=k-1; } A[k+1]=aux; } reportar(A,N); }

void insercion_binaria(int A[],int N) { int i=0,aux=0,izq=0,der=0,m=0,j=0; for(i=1;i<N;i++) { aux=A[i]; izq=0; der=i-1; while(izq<=der) { m=(int)((izq+der)/2); if(aux<=A[m]) der=m-1; else izq=m+1; } j=i-1; while(j>=izq) { A[j+1]=A[j]; j=j-1; } A[izq]=aux; } reportar(A,N); }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


En: seleccin.h
void seleccion_directa(int A[],int N) { int i=0, menor=0,k=0,j=0; for(i=0;i<N-1;i++) {

UPN Cajamarca

Ing. Sistemas

menor=A[i]; k=i; for(j=i+1;j<N;j++) { if(A[j]<menor) { menor=A[j]; k=j; } } A[k]=A[i]; A[i]=menor; } reportar(A,N); } void shell(int A[],int N) { int IN=N,i=0,aux=0; bool band; while(IN>0) { IN=(int)(IN/2); band=true; while(band) { band=false; i=0; while((i+IN)<N) { if(A[i]>A[i+IN]) { aux=A[i]; A[i]=A[i+IN]; A[i+IN]=aux; band=true; } i++; } } } reportar(A,N); }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


En: quicksort.h

UPN Cajamarca

Ing. Sistemas

//----------------------------------------------------------void reduce_recursivo(int A[],int ini, int fin) { int izq, der,pos,aux; bool band=true; izq=ini; der=fin; pos=ini; while(band) { band=false; while((A[der] > A[pos]) && (pos!=der)) der=der-1; if(pos!=der) { aux=A[pos]; A[pos]=A[der]; A[der]=aux; pos=der; while((A[izq] < A[pos]) && (pos !=izq)) izq=izq+1; if(pos!=izq) { band=true; aux=A[pos]; A[pos]=A[izq]; A[izq]=aux; pos=izq; } } } if(ini<(pos-1)) reduce_recursivo(A,ini,pos-1); if((pos+1)<fin) reduce_recursivo(A,pos+1,fin); }

void quicksort_recursivo(int A[], int N) { reduce_recursivo(A,0,N-1); reportar(A,N); } //-------------------------------------------------------void reduce_iterativo(int A[], int ini, int fin, int pos) { int izq=ini, der=fin,aux; pos=ini; bool band=true; while(band) {

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2

UPN Cajamarca

Ing. Sistemas

while((A[der] > A[pos]) && (pos!=der)) der=der-1; if(pos==der) band=false; else { aux=A[pos]; A[pos]=A[der]; A[der]=aux; pos=der; while((A[izq] < A[pos]) && (pos!=izq)) izq=izq+1; if(pos==izq) band=false; else if(pos!=izq) { aux=A[pos]; A[pos]=A[izq]; A[izq]=aux; pos=izq; } } } }

void quicksort_iterativo(int A[],int N) { int tope=0, ini, fin, pos; int PILA_MENOR[N], PILA_MAYOR[N]; PILA_MENOR[tope]=0; PILA_MAYOR[tope]=N-1; int t=0; while(tope > -1) { ini=PILA_MENOR[tope]; fin=PILA_MAYOR[tope]; pos=ini; tope=tope-1; reduce_iterativo(A,ini,fin,pos); if(ini <(pos-1)) { tope=tope+1; PILA_MENOR[tope]=ini; PILA_MAYOR[tope]=(pos-1); } if(fin >(pos+1)) { tope=tope+1; PILA_MENOR[tope]=(pos+1); PILA_MAYOR[tope]=fin; } } reportar(A,N); }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


En: heapsort.h
void inserta_monticulo(int A[], int N) { int i, k, aux; bool band; for (i=1; i<N; i++) { k=i; band=true; while (k>0 && band==true) { band=false; if (A[k]>A[(int)(k/2)]) { aux=A[(int)(k/2)]; A[(int)(k/2)]=A[k]; A[k]=aux; k=(int)(k/2); band=true; } } } }

UPN Cajamarca

Ing. Sistemas

void elimina_monticulo(int A[], int N) { int i, aux, izq, der, k, ap, mayor; bool boolean; for (i=N-1; i>0; i--) { aux=A[i]; A[i]=A[0]; izq=1; der=2; k=0; boolean=true; while (izq<i && boolean==true) { mayor=A[izq]; ap=izq; if (mayor<A[der] && der!=i) { mayor=A[der]; ap=der; } if (aux<mayor) { A[k]=A[ap]; k=ap; } else boolean=false; izq=k*2; der=izq+1;

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2


} A[k]=aux; } }

UPN Cajamarca

Ing. Sistemas

void heapsort(int A[], int N) { inserta_monticulo(A,N); reportar(A,N); elimina_monticulo(A,N); reportar(A,N); }

En: bsqueda-interna.h
//Bsqueda Interna //busqueda secuencial desordenado iterativo void secuencial_desordenado(int A[],int N, int X) { int i=0; while((i<N) && (A[i]!=X)) i++; if(i>N) cout<<"\n La informacion no esta en el arreglo \n"; else cout<<"\n La informacion se encuentra en la posicion: "<<i<< " \n"; } //busqueda secuencial desordenado recursivo void secuencial_desordenado_recursivo(int A[],int N, int X,int i) { if(i>N) cout<<"\n La informacion no esta en el arreglo \n"; else { if(A[i]==X) cout<<"\n La informacion se encuentra en la posicion: "<<i<< " \n"; else secuencial_desordenado_recursivo(A,N,X,i+1); } } //busqueda secuencial ordenado iterativo void secuencial_ordenado(int A[],int N, int X) { int i=0; while((i<N) && (X > A[i])) i++; if((i>N) || (X < A[i])) cout<<"\n La informacion no esta en el arreglo \n"; else cout<<"\n La informacion se encuentra en la posicion: "<<i<< " \n"; }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2

UPN Cajamarca

Ing. Sistemas

//busqueda secuencial ordenado recursivo void secuencial_ordenado_recursivo(int A[],int N, int X,int i) { if((i<N) && (X > A[i])) secuencial_ordenado_recursivo(A,N,X,i+1); else { if((i>N) || (X < A[i])) cout<<"\n La informacion no esta en el arreglo \n"; else cout<<"\n La informacion se encuentra en la posicion: "<<i<< " \n"; } } //busqueda binaria void binaria(int A[], int N, int X) { int izq,der,cen; bool band=false; izq=0; der=N-1; while((izq<=der) && (band==false)) { cen=((izq+der)/2); if(X==A[cen]) band=true; else { if(X>A[cen]) izq=cen+1; else der=cen-1; } } if(band==true) cout<<"\n La informacion se encuentra en la posicion: "<<cen<< " \n"; else cout<<"\n La informacion no esta en el arreglo \n"; } //busqueda binaria sin bandera void binaria_sin_bandera(int A[], int N, int X) { int izq,der,cen; izq=0; der=N-1; cen=((izq+der)/2); while((izq<=der) && (X!=A[cen])) { if(X>A[cen]) izq=cen+1; else der=cen-1; cen=((izq+der)/2); } if(izq>der) cout<<"\n La informacion no esta en el arreglo \n"; else cout<<"\n La informacion se encuentra en la posicion: "<<cen<< " \n"; }

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2

UPN Cajamarca

Ing. Sistemas

//busqueda binaria recursivo void binaria_recursivo(int A[],int izq, int der, int X) { int cen; if(izq>der) cout<<"\n La informacion no esta en el arreglo \n"; else { cen=((izq+der)/2); if(X==A[cen]) cout<<"\n La informacion se encuentra en la posicion: "<<cen<< " \n"; else { if(X>A[cen]) binaria_recursivo(A,cen+1,der,X); else binaria_recursivo(A,izq,cen-1,X); } } }

Si se han dado cuenta se hace uso de una funcin reportar, bueno la funcin la encontramos en: utilidades.h
void reportar(int A[], int n) { int i=0; for(i=0;i<n;i++) printf(" %d ",A[i]); printf("\n\n"); }

Bien ahora viene la funcin principal, donde llamamos a cada uno de los headers creados: main.cpp #include <cstdlib> #include <iostream> using namespace std; //para el uso de cout //archivos headers #include "utilidades.h" #include "burbuja.h" #include "insercion.h" #include "seleccion.h" #include "quicksort.h" #include "heapsort.h" #include "busqueda-interna.h"

Ing. Leissi M. Castaeda Len

Algoritmos y Estructura de Datos 2

UPN Cajamarca

Ing. Sistemas

int main(int argc, char *argv[]) { int N=5; int A[N]; A[0]=1; A[1]=2; A[2]=13; A[3]=18; A[4]=19; reportar(A,N); //burbuja_menor(A,N); //burbuja_mayor(A,N); //burbuja_con_senal(A,N); //sacudida(A,N); //insercion_directa(A,N); //insercion_binaria(A,N); //seleccion_directa(A,N); //shell(A,N); //quicksort_recursivo(A,N); //quicksort_iterativo(A,N); //heapsort(A,N); //secuencial_desordenado(A,N,3); //binaria_sin_bandera(A,N,19); binaria_recursivo(A,0,N-1,2); system("PAUSE"); return EXIT_SUCCESS; }

Queda por parte del usuario agregar una funcin para ingresar el tamao del arreglo y los datos del arreglo, en este caso para modo de prueba se lo ha definido ya.

Ing. Leissi M. Castaeda Len

S-ar putea să vă placă și