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!!!