La Inserción Binaria, es una mejora de la Inserción Directa.
La Inserción Binaria es un método de inserción, que difiere de la Inserción Directa simplemente en la búsqueda de la posición de la Inserción.
Veamos un ejemplo de como funciona este método de ordenamiento de Inserción Binaria, analizando paso a paso.
1. Hallamos el elemento central del área comprendida por la parte ordenada más la posición del elemento a insertar.
2. Comparamos el elemento central con el elemento que queremos insertar. Si dicho elemento central es menor o igual, nos quedamos con la parte derecha (Sin incluir el elemento central). En caso contrario, nos quedamos con la parte izquierda incluyendo al elemento central.
4. Cuando el área sea nula, tendremos la posición de inserción.
A continuación veamos un ejemplo en Pseudo-Código Para el Método de Inserción Binaria
Ejemplo del Código Implementado
Un ejemplo de método de inserción binaria en C#
int
auxiliar;
int
q;
int
izqui;
int
dere;
for
(int i = 0; i < numeros.Length; i++)
{
auxiliar = numeros[i];
izqui = 0;
dere = i - 1;
while (izqui <= dere)
{
q = ((izqui + dere)
/ 2);
if
(auxiliar < numeros[q])
{
dere = q - 1;
}
else
{
izqui = q + 1;
}
j = i - 1;
while (j >= izqui)
{
numeros[j + 1]
= numeros[j];
j = j - 1;
}
numeros[izqui] =
auxiliar;
}
}
for
(int i = 0; i < longitud; i++)
Console.WriteLine(" " + numeros[i]);
El de inserción binaria lo hice de esta manera:
ResponderEliminarpublic static void SortByBinarySearch(int[] vector)
{
int aux;
int primero;
int ultimo;
int central;
for (int k = 0; k < vector.Length; k++)
{
aux = vector[k];
primero = 0;
ultimo = k - 1;
while (primero <= ultimo)
{
central = (primero + ultimo) / 2;
if (aux <= vector[central])
{
ultimo = central - 1;
}
else
{
primero = central + 1;
}
}
for (int i = k-1; i >= primero; i--)
{
vector[i + 1] = vector[i];
}
vector[primero] = aux;
}
}
Muchas gracias amigos me soluciono el problema que tenia
EliminarMi codigo es este
Eliminarclass Program
{
static void Main(string[] args)
{
Console.WriteLine("Orden binaria!");
int[] vector = {37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54};
OrdenBinaria(vector);
Console.WriteLine("Los numeros ordenados son: ");
for (int i = 0; i < vector.Length; i++)
{
Console.Write(" "+vector[i]);
}
Console.ReadKey();
}
public static void OrdenBinaria(int[] vector)
{
int aux;
int izquierda;
int derecha;
int q;
for (int k = 0; k < vector.Length; k++)
{
aux = vector[k];
izquierda = 0;
derecha = k - 1;
while (izquierda <= derecha)
{
q = (izquierda + derecha) / 2;
if (aux <= vector[q])
{
derecha = q - 1;
}
else
{
izquierda = q + 1;
}
}
for (int i = k - 1; i >= izquierda; i--)
{
vector[i + 1] = vector[i];
}
vector[izquierda] = aux;
}
}
}