Búsquedas y Ordenamientos en C++

 



#include<iostream>

using namespace std;

//Prototipo de funciones

void busquedaSecuencial(int n, int []); //Procedimiento para Realizar una Busqueda de tipo Secuencial

void busquedaBinaria(int n, int d[]);   //Procedimiento para Realizar una Busqueda de tipo Binaria

void ordenamientoSeleccion(int n,int []);   //Procedimiento para Realizar un Ordenamiento Metodo Seleccion

void ordenamientoBurbuja(int n,int []);     //Procedimiento para Realizar un Ordenamiento Metodo Burbuja

void ordenamientoInsercion(int n, int []);  //Procedimiento para Realizar un Ordenamiento Metodo Insercion


int main()

{

    int opcion, n;

    //Ingreso manual de un Arreglo

    cout<<" ¿Cuántos Elementos Te Gustaria Ingresar?: "//Definir el tamaño del arreglo

    cin>>n;

    int d[n];

    for(int i = 0; i < n ; i++){     //Ingreso de cada elemento del arreglo

        cout<<" Ingrese el valor: "<< i<<" : ";

        cin>> d[i];

    }

    cout<<"\n Su Arreglo es: ";   //Mostrar el arreglo ingresado

    for(int i = 0; i < n ; i++){

        cout<< d[i] <<" ";

    }

    cout<<endl;

    

    //MENU

 do{

     //Elejir el programa que desea ejecutar

     cout<<"\n 1. Búsqueda Secuencial"<<endl;

     cout<<" 2. Búsqueda Binaria"<<endl;

     cout<<" 3. Ordenamiento por Selección"<<endl;

     cout<<" 4. Ordenamiento por el Método de Burbuja"<<endl;

     cout<<" 5. Ordenamiento por Inserción"<<endl;

   

 

     cout<<" Introduzca una opcion (1-5): ";

     cin>>opcion;

 

 switch (opcion)

 {

     case 1:

         busquedaSecuencial(n,d); //Busqueda secuencial el orden del aareglo no importa

         break;

      case 2:

         cout<<"\n NOTA: El Arreglo debe estar ordenado"<<endl; //Busqueda binaria es necesario que el arreglo este ordenado

         busquedaBinaria(n,d);

         break;

     case 3:

         ordenamientoSeleccion(n, d);

        break;

     case 4:

         ordenamientoBurbuja(n,d);

        break;

         

     case 5:

         ordenamientoInsercion(n,d);

        break;

 }

 } while(opcion != 7);

}


//------------------------------------ PROGRAMA 1: BUSQUEDA SECUENCIAL --------------------------------------

void busquedaSecuencial(int n,int d[]){  //Va recorriendo por todo el arreglo, aqui no importa si esta arreglago o no

  

    int i = 0,valor, nComparaciones = 0//valor = numeroAbuscar

    bool respuesta = false;

    cout<<" Ingrese el Número a Buscar: "; //Pedir el numero que desea encontrar dentro del arreglo

    cin>>valor;

    

    

    while((respuesta == false) && (i<n)){ //Mientras el numeroAbucar no se enuentre

        nComparaciones += 1;

        if(d[i] == valor)  //Recorremos el arreglo, si un elemento del arreglo es igual a numeroAbuscar

            respuesta = true//Se ha encontrado el numeroAbuscar

        else if(valor > d[i]) //Si el numeroAbuscar no coincide con ningun elemento del arreglo

            respuesta = false//No se ha encontrado el numeroAbuscar

        i++;

    }

  

    if(respuesta == false){

        cout<<"\n El Número A Buscar No Existe en el Arreglo"<<endl;

    }else{

        cout<<"\n El Número Ha sido Encontrado en la Posición: "<< nComparaciones - 1<<endl; //Mostrar la posicion en la que se ha encontrado el numeroAbuscar

    }

}


//------------------------------------ PROGRAMA 2: BUSQUEDA BINARIA ---------------------------------------

void busquedaBinaria(int n, int d[]){

    int valor, primero, ultimo, medio; //valor = numeroAbuscar, primero = celda0 del arreglo, ultimo = celdan del arreglo, medio = celda de la mitad

    cout<<" Ingrese el numero que desea buscar: "; //Pedir el numero que desea encontrar dentro del arreglo

    cin>>valor;

    

    primero = 0;

    ultimo = n;

    

    medio = (primero + ultimo)/2; //Calcular el numeroMedio del arreglo

    while (primero <= ultimo){

        if (d[medio] < valor){ //numeroAbuscar se encuentra al lado derecho del arreglo

            primero = medio + 1; //Calculamos el numero valor de primero

        } else if (d[medio] == valor){ //Ya se ha encontrado numeroAbuscar

            cout<<"\n El Número Ha sido Encontrado en la Posición: "<<medio<<endl;

        break;

        } else{ //numeroAbuscar se encuentra al lado izquierdo del arreglo

            ultimo = medio - 1;

        }

       medio = (primero + ultimo)/2; //Actualizamos el valor de mitad

    } if (primero > ultimo) {

        cout<< "\n El Número A Buscar No Existe en el Arreglo"<<endl;

    }

}


//------------------------------------ PROGRAMA 3: ORDEN. SELECCION -----------------------------------------

void ordenamientoSeleccion(int n,int d[]){


    for(int i = 0; i < n; i++){  //Recorre todo el arreglo desde la posición inicial hasta el final

        for(int j = i + 1; j < n; j++){ //Recorre el arreglo desde una posición siguiente al inicio

            if( d[i] > d[j]){

                int aux = d[j];  //Uso de un auxiliar para el intercambio de los valores

                d[j] = d[i];

                d[i] = aux;

            }

        }

    }

    cout<<"\n Su Arreglo Ordenado es: "; //Mostrar el arreglo ordenado

    for(int i = 0; i < n ; i++){

        cout<< d[i] << " ";

    }

    cout<<endl;

}


//------------------------------------ PROGRAMA 4: ORDEN. BURBUJA -------------------------------------------

void ordenamientoBurbuja(int n, int d[]){

    int aux;

        for(int i = 1; i < n; ++i){  //Recorre todo el arreglo desde la posición inicial hasta el final

            for(int j = 0; j < (n-i); j++){

                if( d[j] > d[j+1]){

                    aux = d[j];   //Uso de un auxiliar para el intercambio de los valores

                    d[j] = d[j+1];

                    d[j+1] = aux;

                }

        }

    }

    cout<<"\n Su Arreglo Ordenado es: "; //Mostrar el arreglo ordenado

        for(int i = 0; i < n ; i++){

            cout<<d[i]<<" ";

        }

    cout<<endl;

    }

//------------------------------------ PROGRAMA 5: ORDEN. INSERCION -----------------------------------------

void ordenamientoInsercion (int n, int d[n]){

    

    int j, aux;

    for(int i = 0; i < n ; i++){

        j = i;

        aux = d[i];  //Asignamos a aux el valor de cada posiciond del arreglo, para el intercambio de valores

      while((j > 0) && (d [j-1] > aux)){  //Compara numero en el que se encuentre con su anterior

          d[j] = d [j - 1];

          j = j - 1;

        }

        d [j]= aux;

    }

    cout<<"\n Su Arreglo Ordenado es: "; //Mostrar el arreglo ordenado

    for(int i = 0; i < n ; i++){

    cout<< d[i]<<" ";

}

    cout<<endl;

}


Publicar un comentario

0 Comentarios