Clasificación de inserción binaria

La clasificación por inserción binaria es un algoritmo de clasificación que es similar a la clasificación por inserción , pero en lugar de usar la búsqueda lineal para encontrar la ubicación donde se debe insertar un elemento, usamos la búsqueda binaria . Por lo tanto, reducimos el valor comparativo de insertar un solo elemento de O (N) a O (log N).

Es un algoritmo flexible, lo que significa que funciona más rápido cuando los mismos miembros dados ya están muy ordenados, es decir, la ubicación actual de la característica está más cerca de su ubicación real en la lista ordenada.

Es un algoritmo de filtrado estable: los elementos con los mismos valores aparecen en la misma secuencia en el último orden en que estaban en la primera lista.

Aplicaciones de la ordenación por inserción binaria:

  • La ordenación por inserción binaria funciona mejor cuando la array tiene un número menor de elementos.
  • Al realizar una ordenación rápida o una ordenación combinada, cuando el tamaño del subarreglo se vuelve más pequeño (por ejemplo, <= 25 elementos), es mejor usar una ordenación por inserción binaria.
  • Este algoritmo también funciona cuando el costo de las comparaciones entre claves es lo suficientemente alto. Por ejemplo, si queremos filtrar varias strings, el rendimiento de comparación de dos strings será mayor.

¿Cómo funciona la ordenación por inserción binaria?

  • En el modo de clasificación por inserción binaria, dividimos los mismos miembros en dos subarreglos: filtrados y sin filtrar. El primer elemento de los mismos miembros está en el subarreglo organizado y todos los demás elementos no están planificados.
  • Luego iteramos desde el segundo elemento hasta el último. En la repetición de la i-ésima, hacemos del objeto actual nuestra “clave”. Esta clave es una característica que debemos agregar a nuestra lista existente a continuación.
  • Para hacer esto, primero usamos una búsqueda binaria en el subarreglo ordenado a continuación para encontrar la ubicación de un elemento más grande que nuestra clave. Llamemos a esta posición «pos». Luego cambiamos a la derecha todos los elementos de pos a 1 y creamos Array[pos] = key.
  • Podemos notar que en cada i-ésima multiplicación, la parte izquierda de la array hasta (i – 1) ya está ordenada.

Enfoque para implementar la ordenación por inserción binaria:

  • Iterar la array desde el segundo elemento hasta el último elemento.
  • Almacene el elemento actual A[i] en una clave variable.
  • Encuentre la posición del elemento justo mayor que A[i] en el subarreglo de A[0] a A[i-1] mediante la búsqueda binaria. Digamos que este elemento está en el índice pos.
  • Desplace todos los elementos de index pos a i-1 hacia la derecha.
  • A[pos] = clave.

Complete Interview Preparation - GFG

A continuación se muestra la implementación del enfoque anterior:

C++

// C program for implementation of
// binary insertion sort
#include <iostream>
using namespace std;
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    cout <<"Sorted array: \n";
    for (i = 0; i < n; i++)
        cout <<" "<< a[i];
  
    return 0;
}
  
// this code is contribution by shivanisinghss2110

C

// C program for implementation of 
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted 
// in a[low..high]
int binarySearch(int a[], int item, 
                 int low, int high)
{
    if (high <= low)
        return (item > a[low]) ? 
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item, 
                            mid + 1, high);
    return binarySearch(a, item, low, 
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i) 
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) 
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
  
    return 0;
}

Java

// Java Program implementing
// binary insertion sort
  
import java.util.Arrays;
class GFG 
{
    
    public static void main(String[] args)
    {
        final int[] arr = { 37, 23, 0,   17, 12, 72,
                            31, 46, 100, 88, 54 };
  
        new GFG().sort(arr);
  
        for (int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + " ");
    }
  
    // Driver Code
    public void sort(int array[])
    {
        for (int i = 1; i < array.length; i++) 
        {
            int x = array[i];
  
            // Find location to insert
            // using binary search
            int j = Math.abs(
                Arrays.binarySearch(array, 0, 
                                    i, x) + 1);
  
            // Shifting array to one
            // location right
            System.arraycopy(array, j,
                             array, j + 1, i - j);
  
            // Placing element at its 
            // correct location
            array[j] = x;
        }
    }
}
  
// Code contributed by Mohit Gupta_OMG

Python3

# Python Program implementation
# of binary insertion sort
  
  
def binary_search(arr, val, start, end):
      
    # we need to distinugish whether we 
    # should insert before or after the 
    # left boundary. imagine [0] is the last 
    # step of the binary search and we need 
    # to decide where to insert -1
    if start == end:
        if arr[start] > val:
            return start
        else:
            return start+1
  
    # this occurs if we are moving 
    # beyond left's boundary meaning 
    # the left boundary is the least 
    # position to find a number greater than val
    if start > end:
        return start
  
    mid = (start+end)//2
    if arr[mid] < val:
        return binary_search(arr, val, mid+1, end)
    elif arr[mid] > val:
        return binary_search(arr, val, start, mid-1)
    else:
        return mid
  
  
def insertion_sort(arr):
    for i in range(1, len(arr)):
        val = arr[i]
        j = binary_search(arr, val, 0, i-1)
        arr = arr[:j] + [val] + arr[j:i] + arr[i+1:]
    return arr
  
  
print("Sorted array:")
print(insertion_sort([37, 23, 0, 31, 22, 17, 12, 72, 31, 46, 100, 88, 54]))
  
# Code contributed by Mohit Gupta_OMG

C#

// C# Program implementing
// binary insertion sort
using System;
  
class GFG {
  
    public static void Main()
    {
        int[] arr = { 37, 23, 0,   17, 12, 72,
                      31, 46, 100, 88, 54 };
  
        sort(arr);
  
        for (int i = 0; i < arr.Length; i++)
            Console.Write(arr[i] + " ");
    }
  
    // Driver Code
    public static void sort(int[] array)
    {
        for (int i = 1; i < array.Length; i++)
        {
            int x = array[i];
  
            // Find location to insert using
            // binary search
            int j = Math.Abs(
                Array.BinarySearch(array, 
                                   0, i, x) + 1);
  
            // Shifting array to one location right
            System.Array.Copy(array, j, 
                              array, j + 1,
                              i - j);
  
            // Placing element at its correct
            // location
            array[j] = x;
        }
    }
}
  
// This code is contributed by nitin mittal.

PHP

<?php
// PHP program for implementation of 
// binary insertion sort
  
// A binary search based function to find 
// the position where item should be 
// inserted in a[low..high]
function binarySearch($a, $item, $low, $high)
{
  
    if ($high <= $low) 
        return ($item > $a[$low]) ? 
                       ($low + 1) : $low; 
  
    $mid = (int)(($low + $high) / 2); 
  
    if($item == $a[$mid]) 
        return $mid + 1; 
  
    if($item > $a[$mid]) 
        return binarySearch($a, $item, 
                            $mid + 1, $high); 
          
    return binarySearch($a, $item, $low, 
                            $mid - 1); 
} 
  
// Function to sort an array a of size 'n' 
function insertionSort(&$a, $n) 
{ 
    $i; $loc; $j; $k; $selected; 
  
    for ($i = 1; $i < $n; ++$i) 
    { 
        $j = $i - 1; 
        $selected = $a[$i]; 
  
        // find location where selected 
        // item should be inserted 
        $loc = binarySearch($a, $selected, 0, $j); 
  
        // Move all elements after location 
        // to create space 
        while ($j >= $loc) 
        { 
            $a[$j + 1] = $a[$j]; 
            $j--; 
        } 
        $a[$j + 1] = $selected; 
    } 
} 
  
// Driver Code
$a = array(37, 23, 0, 17, 12, 72, 
           31, 46, 100, 88, 54); 
             
$n = sizeof($a); 
  
insertionSort($a, $n); 
  
echo "Sorted array:\n"; 
for ($i = 0; $i < $n; $i++) 
    echo "$a[$i] "; 
  
// This code is contributed by 
// Adesh Singh
?>

Javascript

<script>
// Javascript Program implementing
// binary insertion sort
  
function binarySearch(a, item, low, high)
{
   
    if (high <= low)
        return (item > a[low]) ?
                       (low + 1) : low;
   
    mid = Math.floor((low + high) / 2);
   
    if(item == a[mid])
        return mid + 1;
   
    if(item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
           
    return binarySearch(a, item, low,
                            mid - 1);
}
  
function sort(array)
{
    for (let i = 1; i < array.length; i++)
        {
            let j = i - 1;
            let x = array[i];
   
            // Find location to insert
            // using binary search
            let loc = Math.abs(
                binarySearch(array, x,
                                    0, j));
   
            // Shifting array to one
            // location right
              
            while (j >= loc)
            {
                array[j + 1] = array[j];
                j--;
            }
   
            // Placing element at its
            // correct location
            array[j+1] = x;
        }
}
  
// Driver Code
let arr=[ 37, 23, 0,   17, 12, 72,
                            31, 46, 100, 88, 54];
sort(arr);
  
for (let i = 0; i < arr.length; i++)
    document.write(arr[i] + " ");
  
  
// This code is contributed by unknown2108
</script>
// C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
  
    r// C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
  
    // C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
  
// C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
// C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);// C program for implementation of
// binary insertion sort
#include <stdio.h>
  
// A binary search based function
// to find the position
// where item should be inserted
// in a[low..high]
int binarySearch(int a[], int item,
                int low, int high)
{
    if (high <= low)
        return (item > a[low]) ?
                (low + 1) : low;
  
    int mid = (low + high) / 2;
  
    if (item == a[mid])
        return mid + 1;
  
    if (item > a[mid])
        return binarySearch(a, item,
                            mid + 1, high);
    return binarySearch(a, item, low,
                        mid - 1);
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i)
    {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc)
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i])
Producción

Sorted array: 
 0 12 17 23 31 37 46 54 72 88 100

Complejidad del tiempo: el algoritmo en su conjunto todavía tiene un tiempo de ejecución en el peor de los casos de O(n 2 ) debido a la serie de intercambios necesarios para cada inserción. 

Otro enfoque: lo siguiente es una implementación iterativa del código recursivo anterior

C++

#include <iostream>
using namespace std;
  
// iterative implementation
int binarySearch(int a[], int item, int low, int high)
{
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (item == a[mid])
            return mid + 1;
        else if (item > a[mid])
            low = mid + 1;
        else
            high = mid - 1;
    }
  
    return low;
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i) {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    cout <<"Sorted array: \n";
    for (i = 0; i < n; i++)
        cout <<" "<< a[i];
  
    return 0;
}
  
// This code is contributed by shivanisinghss2110.

C

#include <stdio.h>
  
// iterative implementation
int binarySearch(int a[], int item, int low, int high)
{
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (item == a[mid])
            return mid + 1;
        else if (item > a[mid])
            low = mid + 1;
        else
            high = mid - 1;
    }
  
    return low;
}
  
// Function to sort an array a[] of size 'n'
void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i) {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
int main()
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = sizeof(a) / sizeof(a[0]), i;
  
    insertionSort(a, n);
  
    printf("Sorted array: \n");
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
  
    return 0;
}
// contributed by tmeid

Java

import java.io.*;
  
class GFG {
  
// iterative implementation
static int binarySearch(int a[], int item, int low, int high)
{
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (item == a[mid])
            return mid + 1;
        else if (item > a[mid])
            low = mid + 1;
        else
            high = mid - 1;
    }
  
    return low;
}
  
// Function to sort an array a[] of size 'n'
static void insertionSort(int a[], int n)
{
    int i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i) {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
public static void main (String[] args) 
{
    int a[]
        = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = a.length, i;
  
    insertionSort(a, n);
  
    System.out.println("Sorted array:");
    for (i = 0; i < n; i++)
        System.out.print(a[i] +" ");
  
}
}
  
// This code is contributed by shivanisinghss2110.

Python3

# iterative implementation
def binarySearch(a, item, low, high):
    while (low <= high):
        mid = low + (high - low) // 2
        if (item == a[mid]):
            return mid + 1
        elif (item > a[mid]):
            low = mid + 1
        else:
            high = mid - 1
    return low
      
# Function to sort an array a[] of size 'n'
def insertionSort(a, n):
    for i in range (n): 
        j = i - 1
        selected = a[i]
          
        # find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j)
          
        # Move all elements after location to create space
        while (j >= loc):
            a[j + 1] = a[j]
            j-=1
        a[j + 1] = selected
  
# Driver Code
a = [37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54]
n = len(a)
insertionSort(a, n)
print("Sorted array: ")
for i in range (n):
    print(a[i], end=" ")
  
# This code is contributed by shivanisinghss2110

C#

using System;
  
class GFG {
  
// iterative implementation
static int binarySearch(int []a, int item, int low, int high)
{
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (item == a[mid])
            return mid + 1;
        else if (item > a[mid])
            low = mid + 1;
        else
            high = mid - 1;
    }
  
    return low;
}
  
// Function to sort an array a[] of size 'n'
static void insertionSort(int []a, int n)
{
    int i, loc, j, selected;
  
    for (i = 1; i < n; ++i) {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
public static void Main (String[] args) 
{
    int []a = { 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 };
    int n = a.Length, i;
  
    insertionSort(a, n);
  
    Console.WriteLine("Sorted array:");
    for (i = 0; i < n; i++)
        Console.Write(a[i] +" ");
  
}
}
  
// This code is contributed by shivanisinghss2110

Javascript

<script>
// iterative implementation
function binarySearch( a,  item,  low,  high)
{
    while (low <= high) {
        var mid = low + (high - low) / 2;
        if (item == a[mid])
            return mid + 1;
        else if (item > a[mid])
            low = mid + 1;
        else
            high = mid - 1;
    }
  
    return low;
}
  
// Function to sort an array a[] of size 'n'
function insertionSort(a, n)
{
    var i, loc, j, k, selected;
  
    for (i = 1; i < n; ++i) {
        j = i - 1;
        selected = a[i];
  
        // find location where selected should be inseretd
        loc = binarySearch(a, selected, 0, j);
  
        // Move all elements after location to create space
        while (j >= loc) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = selected;
    }
}
  
// Driver Code
    var a = [ 37, 23, 0, 17, 12, 72, 31, 46, 100, 88, 54 ];
    var n = a.length, i;
  
    insertionSort(a, n);
  
    document.write("Sorted array:" + "<br>");
    for (i = 0; i < n; i++)
        document.write(a[i] +" ");
  
  
// This code is contributed by shivanisinghss2110
</script>
Producción

Sorted array: 
 0 12 17 23 31 37 46 54 72 88 100

Echa un vistazo al curso de autoaprendizaje de DSA

Este artículo es una contribución de Amit Auddy . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *