Ejercicios : Métodos de ordenación con un vector numérico

Método de ordenación por inserción directa, burbuja o hundimiento, Método de ordenación por selección directa

en este caso se tratan de prácticas de programación en lenguaje C , que solicitan un vector numérico como entrada de datos, y utilizando funciones realiza la ordenación del vector mediante dos métodos sencillos para ordenar vectores.

Vuelvo a comentar que no es la única solución posible y que la forma de mejorar siempre estas prácticas es que aportéis vuestro granito de arena utilizando para ello los comentarios. Un saludo y gracias por vuestra visita.



La solución de los ejercicios que se plantean es la siguiente:

/*

  Métodos de ordenación de vectores

  ==================================

  Ordenación por intercambio directo (Burbuja o Hundimiento)

  Ordenación por selección directa

  Los ejercicios y practicas propuestos permiten realizar la ordenación de un vector numerico
mediante los métodos de ordenación por selección y por el metodo denominado normalmente burbuja.
Los ejercicios están propuestos por un alumno, que espero pueda consultar los ejercicios y practicas
para su resolución de una manera más efectiva.

*/

#define MAX 10

// Librerías a utilizar

#include <stdio.h>

#include <stdlib.h>

// Predefinición de funciones

void Pide_Datos_Vector(int []);

void Visualiza_Datos_Vector(int []);

void Ordenar_Intercambio_Directo(int [],int []);

void Ordenar_Seleccion_Directa(int [],int []);

// Función principal

int main(int argc, char *argv[])

{

    // Definicion de variables a utilizar

    int VectorDesordenado[MAX];

    int VectorOrdenado[MAX];

    int Opcion=0;

    // Inicializar los vectores para evitar posibles errores

    for(Opcion=0;Opcion<MAX;Opcion++)

    {

      VectorDesordenado[Opcion] = 0;

      VectorOrdenado[Opcion] = 0;

    }

    // Visualizar menú de opciones

    do {

       printf("\n1.- Solicitar datos del vector.");

       printf("\n2.- Visualizar datos del vector desordenado.");

       printf("\n3.- Ordenar por intercambio directo.");

       printf("\n4.- Ordenar por seleccion directa.");

       printf("\n5.- Visualizar datos del vector ordenado.");

       printf("\n6.- Rellenar vector desordenado aleatoriamente.");

       printf("\n0.- Salir");

       printf("\n=============================================");

       printf("\nOpcion...: ");

       scanf(" %d",&Opcion);

       switch(Opcion) {

         case 1:

              // Solicitar datos del vector, llamar a la funcion pedir

              Pide_Datos_Vector(VectorDesordenado);

              break;

         case 2:

              // Visualizar datos del vector desordenado

              Visualiza_Datos_Vector(VectorDesordenado);

              break;

         case 3:

              // Ordenar por el metodo de intercambio directo

              Ordenar_Intercambio_Directo(VectorDesordenado,VectorOrdenado);

              break;

         case 4:

              // Ordenar por el metodo de seleccion directa

              Ordenar_Seleccion_Directa(VectorDesordenado,VectorOrdenado);

              break;

         case 5:

              // Visualizar datos del vector ordenado

              Visualiza_Datos_Vector(VectorOrdenado);

              break;

       }

    } while(Opcion!=0);  

  system("PAUSE");	

  return 0;

}

// Función Solicitar Datos del vector desordenado

void Pide_Datos_Vector(int VectorDesordenado[])

{

     // Crear variable contador para recorrer el vector

     int contador=0;

     // Recorrer el vector y solicitar datos del mismo

     for(contador=0;contador<MAX;contador++)

     {

      printf("\nValor posicion [%d] : ",contador+1);

      scanf(" %d",&VectorDesordenado[contador]);

     }

}

// Función para visualizar los datos del vector desordenado/ordenado

void Visualiza_Datos_Vector(int Vector[])

{

     // Crear variable contador para recorrer el vector

     int contador=0;

     // Recorrer el vector y visualizar los datos del mismo

     printf("\n========================================================\n\n");

     for(contador=0;contador<MAX;contador++)

     {

       printf("%5d",Vector[contador]);

     }

     printf("\n\n========================================================\n");

}

// Función para ordenar el vector con el método de intercambio directo

void Ordenar_Intercambio_Directo(int VectorD[],int VectorO[])

{

     // Variables para recorrer los vectores

     int contador = 0;

     int elementos = 0;

     int intercambio = 0;

     int bandera = 1;

     // Copiar el contenido del vector desordenado al ordenado

     for(contador=0;contador<MAX;contador++)

     {

        VectorO[contador] = VectorD[contador];

     }

     // Ordenar el vector por el método de la burbuja

     printf("\n\nOrdenando Vector .");

     for(elementos=MAX-1;elementos>0 && bandera==1;elementos--)

     {

       bandera = 0;

       for(contador=0;contador<elementos;contador++)

       {

         if(VectorO[contador]>VectorO[contador+1])

         {

           intercambio = VectorO[contador];

           VectorO[contador] = VectorO[contador+1];

           VectorO[contador+1] = intercambio; 

           bandera = 1;

           printf(".");

         }

       }

     }

     printf("\n\nVector Ordenado\n\n");

}

// Función para ordenar el vector con el método de selección directa

void Ordenar_Seleccion_Directa(int VectorD[],int VectorO[])

{

     // Variables a utilizar

     int minimo = 0;

     int pos_minimo = 0;

     int contador = 0;

     int elementos = 0;

     int intercambio = 0;

     // Copiar el contenido del vector desordenado al ordenado

     for(contador=0;contador<MAX;contador++)

     {

        VectorO[contador] = VectorD[contador];

     }

     // Método de ordenación por selección directa

     for(elementos=0;elementos<MAX;elementos++)

     {

       minimo = VectorO[elementos];

       pos_minimo = elementos;

       for(contador=elementos;contador<MAX;contador++)

       {

         if(minimo>VectorO[contador])

         {

           minimo = VectorO[contador];

           pos_minimo = contador;

         }

       }

       intercambio = VectorO[elementos];

       VectorO[elementos] = minimo;

       VectorO[pos_minimo] = intercambio;

     }

}

El resultado del ejercicio y práctica ha de ser similar al que se muestra a continuación.

Gracias por vuestra visita y un saludo Universal!!!