Método de Ordenamiento de Inserción Binaria en C#

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.


3. Repetimos el mismo proceso sobre el área con la que nos quedamos, hasta que dicha área sea nula.


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]);





3 comentarios:

  1. El de inserción binaria lo hice de esta manera:

    public 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;
    }
    }

    ResponderEliminar
    Respuestas
    1. Muchas gracias amigos me soluciono el problema que tenia

      Eliminar
    2. Mi codigo es este

      class 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;
      }
      }
      }

      Eliminar