El método de inserción directa es el que generalmente utilizan los jugadores de cartas cuando ordenan éstas, de ahí que también se conozca con el nombre de método de la baraja.
La idea central de este algoritmo consiste en insertar un elemento del arreglo en la parte izquierda del mismo, que ya se encuentra ordenada. Este proceso se repite desde el segundo hasta el n-esimo elemento.
Ejemplo:
Se desean ordenarse las siguientes clave del arreglo A: 15, 67, 08, 16, 44, 27, 12, 35
Primera pasada
A[2] < A[1] 67 < 15 No hay intercambio
A: 15, 67, 08, 16, 44, 27, 12, 35
Segunda pasada
A[3] < A[2] 08 < 67 Si hay intercambio
A[2] < A[1] 08 < 15 Si hay
A: 15, 08, 67, 16, 44, 27, 12, 35
Tercera pasada
A[4] < A[3] 08 < 15 Si hay intercambio
A[3] < A[2] 08 < 15 Si hay intercambio
A= 08, 15, 67, 16, 44, 27, 12, 35
Hasta la séptima pasada el arreglo queda ordenado: 08, 12, 15, 16, 27, 35, 44, 67
A continuación veamos un ejemplo en Pseudo-Código Para el Método de Shell Sort
void InsercionDirecta (int arreglo[], int tam)
{
int i , j , valorBusqueda;
for(i = 1; i < tam; i++)
{
valorBusqueda = a[i];
for (j = i - 1; j >= 0 && a[j] > valorBusqueda; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = valorBusqueda;
}
val = a[i];
}
A continuación veamos un ejemplo en Pseudo-Código Para el Método de Shell Sort
void InsercionDirecta (int arreglo[], int tam)
{
int i , j , valorBusqueda;
for(i = 1; i < tam; i++)
{
valorBusqueda = a[i];
for (j = i - 1; j >= 0 && a[j] > valorBusqueda; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = valorBusqueda;
}
val = a[i];
}
Ejemplo del Método de Ordenamiento Inserción Directa en c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PruebaVector
{
class PruebaVector
{
private int[] vector;
public void Cargar()
{
Console.WriteLine("Metodo de insercion directa");
Console.Write("Cuantos longitud del vector:");
string linea;
linea = Console.ReadLine();
int cant;
cant = int.Parse(linea);
vector = new int[cant];
for (int f = 0; f < vector.Length; f++)
{
Console.Write("Ingrese elemento "+(f+1)+": ");
linea = Console.ReadLine();
vector[f] = int.Parse(linea);
}
}
public void InsercionDirecta()
{
int auxili;
int j;
for (int i = 0; i < vector.Length; i++)
{
auxili = vector[i];
j = i - 1;
while (j >= 0 && vector[j] > auxili)
{
vector[j + 1] = vector[j];
j--;
}
vector[j + 1] = auxili;
}
}
public void Imprimir()
{
Console.WriteLine("Vector ordenados en forma ascendente");
for (int f = 0; f < vector.Length; f++)
{
Console.Write(vector[f]+" ");
}
Console.ReadKey();
}
static void Main(string[] args)
{
PruebaVector pv = new PruebaVector();
pv.Cargar();
pv.InsercionDirecta();
pv.Imprimir();
}
}
}
no funciona el código
ResponderEliminar:s
Me sirvió la información y mucho pero el código casi no me funcionó pero muchas GRACIAS
ResponderEliminarquien es EL AUTOR DE ESTO PARA QUE LO PONGA EN MI BIBLIOGRAFIA???
ResponderEliminarGracias!! entendi todo y me funciono, muchas gracias por estas ayudas.
ResponderEliminar