Ordenación por Inserción

Algoritmos | October 1st

Cartas-Ordenadas

Este algoritmo se basa en la técnica para ordenar una mano de cartas.

Para cada carta levantada buscamos el lugar correcto y para acomodar la nueva carta debemos hacer espacio en la mano para insertarla.

Análisis

Arreglo

Comenzamos con un “subconjunto ordenado” que contiene solo el primer elemento del conjunto; en este caso es el 8.

Conjunto y Subconjunto

Comenzamos tomando el segundo elemento del conjunto y lo comparamos con el elemento del subconjunto. Al ser 5 menor que 8; insertamos el segundo elemento en la primer posición y recorremos el 8 a la segunda posición. Así el subconjunto ordenado tiene dos elementos ordenados (5 y 8).

Insercion-1

Ahora tomamos el tercer elemento (2), lo comparamos con el subconjunto. Lo insertamos en la primer posición y recorremos el 5 y el 8. Así el subconjunto ordenado tiene tres elementos (2, 5 y 7).

Insercion-2

Luego tomamos el cuarto elemento (7) del conjunto, lo comparamos con el subconjunto. Al ser 7 menor que 8 lo insertamos en la posición en la que se encuentre el 7 y solo recorremos el 8. Ahora el subconjunto ordenado tiene cuatro elementos (2, 5, 7 y 8).

Insercion-3

Ahora tomamos el quinto elemento del conjunto (6), lo comparamos con el subconjunto y lo insertamos en la posición del elemento 7 y recorremos el 7 y el 8. Ahora el subconjunto ordenado contiene cinco elementos (2, 5, 6, 7 y 8).

Insercion-4

Tomamos el sexto elemento (3), lo comparamos con el subconjunto y lo insertamos en la posición del 5 y recorremos los elementos 5, 6, 7 y 8. Y ahora el subconjunto ordenado tiene seis elementos (2, 3, 5, 6, 7 y 8).

Insercion-5

Por ultimo tomamos el séptimo elemento (4), lo comparamos con el subconjunto. Lo insertamos en la posición del número 5 y recorremos los elementos 5, 6, 7 y 8. Y ahora tenemos nuestro arreglo ordenado.

Insercion-6

El paso que se encarga de realizar la inserción de los elementos se repite n – 1.

Código de la función

Una vez que hayamos entendido como funciona el método de inserción para ordenar elementos podemos diseñar nuestro código fuente.

void insercion(int array[], int size)
{
	int i, j, valor;

	for (i = 1; i < size; ++i)
	{
		valor = array[i];

		for (j = i; j > 0 && array[j - 1] > valor; --j)
		{
			array[j] = array[j - 1];
		}

		array[j] = valor;
	}
}

Código completo

Pongamos a prueba nuestra función en C++.

#include <iostream>

using namespace std;

void insercion(int array[], int size)
{
	int i, j, valor;

	for (i = 1; i < size; ++i)
	{
		valor = array[i];

		for (j = i; j > 0 && array[j - 1] > valor; --j)
		{
			array[j] = array[j - 1];
		}

		array[j] = valor;
	}
}

int main (int argc, char *argv[])
{
	int numeros[] = {8,5,2,7,6,3,4};

	/* Imprimimos el arreglo original */
	for (int i = 0; i < 7; ++i) {
		cout << numeros[i] << " ";
	}

	cout << endl;

	insercion(numeros, 7);

	/* Imprimimos el arreglo ordenado */
	for (int i = 0; i < 7; ++i){
		cout << numeros[i] << " ";
	}

	cout << endl;
}
$ g++ -o Insercion Insercion.cpp
$ ./Insercion
8 5 2 7 6 3 4
2 3 4 5 6 7 8

Trackbacks/Pingbacks

  1. [...] con el método de inserción desde un enfoque divide y vencerás.Recomiendo dominar el método de Ordenación por Inserción. AnálisisOrdenemos el siguiente grupo de 16 elementos que se muestran a continuación.Los [...]

Deja tu comentario