3.9 KiB
title | localeTitle |
---|---|
Freecodecamp Algorithm Insertion Sort Guide | Guía de clasificación de inserción de algoritmo de Freecodecamp |
La ordenación por inserción es una ordenación basada en comparación . Un algoritmo de clasificación se basa en la comparación, si utiliza operadores de comparación (como less than
y greated than
) para encontrar el orden entre dos números.
En esta técnica de clasificación, siempre mantenemos una lista secundaria ordenada en la posición inferior de la lista y luego tomamos un elemento del resto de la lista y lo insertamos en su lugar correcto. Lo hacemos hasta que todos los elementos se insertan en la lista secundaria. Por ejemplo, mientras jugamos a las cartas, ordenamos las cartas en nuestra mano. Comenzando desde la izquierda y moviéndonos hacia la derecha, seguimos insertando la tarjeta en su lugar correcto hasta el final.
Ejemplo
En el ejemplo anterior, la lista secundaria grey shaded
siempre se ordena. Tenga en cuenta que al principio, la lista secundaria contiene solo un elemento y está ordenada de forma trivial . Luego, en cada paso, estamos insertando el elemento más a la izquierda de la sublista white shaded
en su posición correcta.
Por lo tanto, hemos ordenado la lista completa de esta manera.
Algoritmo
Loop for i=0 to N-1:
* Pick element array<a href='https://repl.it/CWZq' target='_blank' rel='nofollow'>i] and insert it into sorted sublist array[0...i-1]
Complejidad
Space complexity: O(1) // Auxillary/temporary space is used.
Time complexity: O(n*n) // Two nested for loops are used.
Implementación de C ++
// Function to sort an array using insertion sort
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;
/* Move elements of arr[0..i-1], that are greater than key,
to one position ahead of their current position */
while (j >= 0 && arr[j] > key)
{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key; // place element key at it's correct place
}
}
int main()
{
// array to be sorted
int arr[5] = {12, 11, 13, 5, 6};
// call the insertion sort
insertionSort(arr, 5);
// prints sorted array ie 5 6 11 12 13
for(int i=0; i<5; i++)
std::cout << arr[i] << " ";
return 0;
}
: cohete: [Ejecutar código ## Implementación de Python
# Function to perform insertion sort
def insertionSort(arr):
# Traverse through array
for i in range(1, len(arr)):
key = arr<a href='https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":rocket:"' target='_blank' rel='nofollow'>i]
# Move elements of arr[0..i-1], that are greater than key,
# to one position ahead of their current position
j = i-1
while j>=0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key # place element key at it's correct place
# array to be sorted
arr = [12, 11, 13, 5, 6]
# call the insertion sort
insertionSort(arr)
# prints sorted array ie 5 6 11 12 13
for i in range(len(arr)):
print(arr[i],end = ' ')
Ventajas
- Eficiente para pequeños conjuntos de datos y conjuntos de datos que están casi ordenados.
- Simplemente implementado.
- Principalmente mejor que la clasificación por burbujas y la selección por selección y generalmente se usa con la clasificación por fusión.
Desventajas
- Es menos eficiente en un gran conjunto de datos que la clasificación por combinación, la clasificación por almacenamiento dinámico y la clasificación rápida.