Hernán Giraldo
Algoritmo realizado con javascript y apoyado en angular para mostrar gráficamente el proceso que se llevó a cabo en el ordenamiento:
Efraín Hernández García
Te quedó súper pro!!
Eduardo Monzón
Genial, Hernán
Insertion Sort es un algoritmo simple que ordena individualmente cada valor, como lo harías al ordenar un set de cartas del juego UNO en tu mano.
Como puedes observar en la imagen, recorremos nuestro set de datos posición por posición y comparamos el número con los valores anteriores, en caso de ser menor, lo colocamos en su posición indicada para ordenar de menor a mayor.
#include <stdio.h> #include <math.h> /* Función de insertion Sort*/ void insertionSort(int arr[], int n) { int i, currentVal, j; for (i = 1; i < n; i++) { currentVal= arr[i]; //obtenemos el valor actual a comparar j = i-1; /* mueve los elementos del arreglo arr[0..i-1],que son mayores que el valor de la posición actual del recorrido, a una posición adelante de su posición actual */ while (j >= 0 && arr[j] > currentVal) { arr[j+1] = arr[j]; j = j-1; } arr[j+1] = currentVal; } } // función auxiliar para imprimir un arrary de tamaño n void printArray(int arr[], int n) { int i; for (i=0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } /* Driver program to test insertion sort */ int main() { int arr[] = {6, 4, 3, 11, 10}; int n = sizeof(arr)/sizeof(arr[0]); insertionSort(arr, n); printArray(arr, n); return 0; }
Hernán Giraldo
Algoritmo realizado con javascript y apoyado en angular para mostrar gráficamente el proceso que se llevó a cabo en el ordenamiento:
Efraín Hernández García
Te quedó súper pro!!
Eduardo Monzón
Genial, Hernán
Manuel Esteban Palacio Calderon
Samuel Hurtado marin
Me gusta mucho hacer eso en los algoritmos la primera vez que los ejecuto, para ir viendo como va todo a su sitio, lleva tiempo pero da satisfacción verlo funcionar todo.
Gloriq Lopez
gracias!! me ayudo a comprender mejor la lógica :)
David Barreto
Y la clase y la explicación??? Así no me gusta! 👎👎👎💻
Diego Reyes Cabrera
La clase de explicacion esta en Youtube :/ https://www.youtube.com/watch?v=nKzEJWbkPbQ (entendi muy bien)
Ismael López
Está es mi implementación en Python
def insertion_sort(list, n): for i in range(0, len(list)): current_value = list[i] position = i while position > 0 and list[position-1] > current_value: list[position] = list[position-1] position-=1 list[position] = current_value print(f"Round {i}: {list}") def run(): list = [50, 83, 64, 0, 12, 46, 45, 54, 14, 78, 23, -1] n = len(list) insertion_sort(list, n) print(list) if __name__ == '__main__': run()
John Alexander Ortiz Ramirez
Jose Antonio Rojas Ollarves
arriba roadtocode
Grecia Olympia Corona Segura
En Python
# Insertion sort algorithm in Python # From lowest to highest def insertion_sort(list, n): for i in range(1, len(list)): current_value = list[i] j = i while j > 0 and list[j - 1] > current_value: list[j] = list[j -1] j = j - 1 list[j] = current_value print(f"Round {i}: {list}") def run(): list = [60, 30, 20, 10, 50, 1, 90] print(list) n = len(list) insertion_sort(list, n) print(list) if __name__ == "__main__": run()```
Jaime Andres Serrano
Ricardo Andres Rojas Alonso
Wandy Rafael Santana Evangelista
Aquí en JS:
Oliver Jesus Tuesta Yoplac
Mi código en Java:
public void insertionSort(int[] arr) { final int n = arr.length; for (int i = 1; i < n; i++) { final int currentValue = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > currentValue) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = currentValue; } }
Sergio Arturo Enriquez Nava
Python
def insertion_sort(lista): n = len(lista) for i in range(0, n): valorAct = lista[i] j = i while j > 0 and lista[j-1] > valorAct: lista[j] = lista[j-1] j -= 1 lista[j] = valorAct def main(): lista = [45,65,87,9,42,1,6,0,5,-34,-266,5,21] print(f'\nLista original:\n\n{lista}') insertion_sort(lista) print(f'\nLista ordenada:\n\n{lista}') if __name__ == '__main__': main()
Jose Antonio Rojas Ollarves
Les comparto este video para reforzar los conocimientos de esta clase:
https://www.youtube.com/watch?v=lYNyL0HuWSg&ab_channel=Programaci%C3%B3nATS
En JS💛
var list = [5,2,4,3,1] function insertion_sort(list) { var j,currentVal for (let index = 1; index < list.length; index++) { currentVal=list[index] j=index-1 while (j>=0 && list[j]>currentVal) { list[j+1] = list[j] j=j-1 } list[j+1]=currentVal } console.log(list) } insertion_sort(list)
David Lara
Así como en el ejercicio anterior tengo una sola duda…
en:
for (i = 1; i < n; i++) { currentVal= arr[i]; j = i-1; }
No se indica en cuánto se inicia n, cómo se hace esta comparación?
María Angélica Pérez Gutiérrez
es porque n se define en la función main, como puedes ver las funciones tipo void no devuelven ningún valor, la función main que es tipo entero es el que inicializa el algoritmo y ejecuta en orden las funciones anteriores. Para no inicializar varias veces n se hace desde el main.
Usuario anónimo
UserDanelia Sanchez Sanchez
Los argumentos por defecto no están permitidos en C, son una característica de C++.
Luis Lira
Me tomó un rato entenderlo, lo que hice para comprende fue ir sustituyendo y haciendo el algoritmo primero mentalmente, haciendo eso me quedó claro cómo funciona el código
def insertion_sort(numbers): n = len(numbers) for i in range(1, n): current_value = numbers[i] j = i - 1 while j >= 0 and numbers[j] > current_value: numbers[j + 1] = numbers[j] j -= 1 numbers[j + 1] = current_value return numbers if __name__ == "__main__": numbers = [6 , 4, 3, 11, 10] print(numbers) ordered_numbers = insertion_sort(numbers) print(ordered_numbers)
Alejandro Gonzalez Duque
Ezequiel Matías Rolón Pettinari
freddy molleda
Tuve que tomar lapiz y papel, para recorrer el código, y una hora treinta minutos para poder comprender como funciona el algoritmo pero es gratificante cuando lo logras
Fernanda Vieira Jófili
Sí!! Muchas veces necesito escribir mi lógica en papel, así que entiendo mejor lo que necesito programar.
Mi solucion, muestra paso por paso como se van moviendo los datos
#include <stdio.h> #include <stdlib.h> void mostrar(int array[],int cantidadEspacios){ for(int i = 0;i < cantidadEspacios;i++){ printf("[ %d ]",array[i]); } } void sort(int array[], int cantidadEspacios){ int temp, pos; for(int i = 1; i < cantidadEspacios;i++){ pos = i; temp = array[i]; printf("\nPaso n° %d, Voy a trabajar con el (%d) en su posicion %d\n",pos, temp ,i); for(int j = i;j > 0;j--){ if(temp < array[j-1]){ array[j] = array[j - 1]; array[j - 1] = temp; pos--; printf("\nEl %d se movio a la posicion %d\n",array[pos] ,pos); for(int h = 0;h < cantidadEspacios;h++){ if(h == pos){ printf("[(%d)]",array[h]); }else{ printf("[ %d ]",array[h]); } } }else if(j <= 1){ printf("\n¡El %d no se movio de posicion!\n",array[pos] ); } } } printf("\nArray ordenado\n"); mostrar(array,cantidadEspacios); } int main() { int array[] = {3,5,1,2,4,8,7,9,12,61,34,-4,-6,100}; int cantidadEspacios = sizeof(array)/sizeof(array[0]); printf("Array desordenado\n\n"); mostrar(array,cantidadEspacios); printf("\n"); sort(array,cantidadEspacios); return 0; }
EL codigo en Python ascendente y descendente
import random def insert_sort(array, n, asc=True): for i in range(1, n): current_value = array[i] j = i - 1 if asc: while j >= 0 and current_value < array[j]: array[j+1] = array[j] j -= 1 elif not asc: while j >= 0 and current_value > array[j]: array[j+1] = array[j] j -= 1 array[j+1] = current_value return array def main(): array = [random.randint(-1000, 1000) for i in range(100)] n = len(array) insert_sort(array, n) print(array) insert_sort(array, n, asc=False) print(array) if __name__ == "__main__": main()
Mi codigo en Python 3.7:
""" Lista de Pasos de nuestro Algoritmo Insertion-Sort: • Crear un array de determinado tamaño indicado por el usuario. • Llenar el array con los respectivos elementos dados por el usuario. • Comparar los dos primeros elementos del array, luego los 3 primeros, y así sucesivamente hasta el final. • Comparar y preguntar cual es más grande entre el primero y segundo elemento, si el segundo es mayor se deja igual en las mismas posiciones, pero si el primero es mayor se cambian las posiciones del menor y los mayores se corren hacia arriba, luego se compara los 3 primeros para saber cuál es mayor, comparando el último con los dos primeros, después comparar los 4 primeros, se compara el último con los 3 primeros, esto se repite hasta recorrer todos los elementos del array. • Detener el ciclo cuando se llegue al índice final y se compare el ultimo elementos con los demás, por lo tanto podemos romper el ciclo para terminar las iteraciones. • Mostrar al usuario el array ordenado. """ import copy flag = True #Bandera para indicar si ya quedo ordenada la lista def insertionList(lista1,n): #Funcion para ordenar el Array o Lista con el método insertion-sort lista2 = copy.copy(lista1) conteo = 1 for i,v in enumerate(lista1): #La i representa el indice y la v respresenta el valor de ese indice conteo +=1 if(conteo > n ): break lista3 = lista2[:conteo] #Se forma pequeñas lista, emepezando por las primeras posiciones. ultimo = lista3[-1] #Sacamos el último elemento de la lista nueva for i1,v1 in enumerate(lista3): if(v1 > ultimo): #Valida si el último valor es menor que los demas elementos de la lista lista4 = [] lista4.append(lista2[i1]) lista2[i1] = ultimo lista2[(i1 + 1):] = lista4 + lista2[(i1+1):(conteo-1)] + lista2[conteo:] 1+1 break return lista2 def getList(n = 0): #Función para crear el Array o Lista lista1 = [] for i in range(n): elemento = int(input("Ingrese el entero en el indice {}:".format(i))) lista1.append(elemento) return lista1 size_list = int(input("Ingrese el tamaño del Array:")) lista = getList(size_list) lista_ordenada = insertionList(lista,size_list) print("Array original: {}".format(lista)) print("Array ordenada: {}".format(lista_ordenada))```
Funcionó jajajaja que alegría y qué emoción me dio :)
#include <stdio.h> #include <math.h> void insertionSort(int arr[], int n) { int i, currentVal, j; for (i = 1; i < n; i++) { currentVal = arr[i]; j = i-1; while (j >= 0 && arr[j] > currentVal) { arr[j+1] = arr[j]; j = j-1; } arr[j+1] = currentVal; } } void printArray(int arr[], int n) { int i; for (i=0; i < n; i++) printf("%d ", arr[i] ); printf("\n"); } int main(int argc, char const *argv[]) { int arr[] = {6, 4, 3, 11, 10}; int n = sizeof(arr)/sizeof(arr[0]); insertionSort(arr, n); printArray(arr, n); return 0; }
la version con adecente o descendente
#include <stdio.h> #include <math.h> #include <stdbool.h> /* Función de insertion Sort*/ void insertionSort(int arr[], int n, bool acc) { int i, currentVal, j; for (i = 1; i < n; i++) { currentVal= arr[i]; //obtenemos el valor actual a comparar j = i-1; /* mueve los elementos del arreglo arr[0..i-1],que son mayores que el valor de la posición actual del recorrido, a una posición adelante de su posición actual */ if(acc){ while (j >= 0 && arr[j] > currentVal){ arr[j+1] = arr[j]; j = j-1; } }else{ while (j >= 0 && arr[j] < currentVal){ arr[j+1] = arr[j]; j = j-1; } } arr[j+1] = currentVal; } } // función auxiliar para imprimir un arrary de tamaño n void printArray(int arr[], int n) { int i; for (i=0; i < n; i++) printf("%d ", arr[i]); printf("\n"); } /* Driver program to test insertion sort */ int main() { int arr[] = {6, 4, 3, 11, 10}; int n = sizeof(arr)/sizeof(arr[0]); insertionSort(arr, n, true); printArray(arr, n); insertionSort(arr, n, false); printArray(arr, n); return 0; }
tengo una duda se puede en c el tener un valor por defecto en la función porque sino me recuerdo mal en c++ se hacia así
void insertionSort(int arr[], int n, bool acc = true)
pero no me compila si no pongo el argumento y me dice un esperaba un cierre de paracentesis. es posible hacerlo en c o no?
Mi solucion en JavaScript
<code> const list1 =[-796, 3229, -5164, -362, 4408, 8965, -6068, 9329, -3034, -443, -6693, 9497, 2615, -5966, -9065, -1160, 6148, 5517, 1123, -8887, 5649, 3302, -1176, -8542, -9166, 8, -2906, 8987, -2414, -7984, 4410, 8872, 5241, -4556, 59, -5562, -3877, 7452, -4467, 2076, 4076, 4297, -3847, -2055, 4483, -1484, -2371, 6199, -7261, -7032, 6010, 2325, -6625, -2601, 3870, 1822, -5665, 9622, 9883, -5794, -5218, 2926, 8599, -3099, 6399, -2570, 3943, -2409, 5114, 9791, -4420, 1065, 3077, -1062, -8004, 4397, 1635, 8578, -9226, 9222, -1793, -2691, -5060, -4727, -4098, 946, -6558, -4111, 4575, -2685, -4729, -5277, 1936, 5106, -2089, 824, 9421, -1683, -2083, 7891, -2099, 1305, -9076, -3535, 2565, -2871, 9448, 7177, -8614, -9954, -362, 1455, -8834, -9846, -8412, 1175, -1981, -5991, 7201, -1997, -5156, -1634, -9803, 1032, 9551, -6153, 8502, 3536, -2980, 8681, -9210, 4408, 8780, -916, -369, -8651, 1246, -702, -5555, 23, 8208, 2037, 6941, 9545, -5147, 5063, -8358, 2772, 8553, 9885, 4624, -3576, 9131, 1229, -429, -479, -673, -7060, -4031, 5650, 6679, 6796, 5622, -6256, -238, -6096, 3096, -1610, -2948, 6291, -1666, 5219, 5850, 7387, -3260, 3672, -1766, -9941, 8252, 2649, 7079, -8026, 6356, 676, -5065, -6338, 3287, 680, -3269, 2770, 6637, -8744, 9162, -2204, -3066, -7228, 8762, 1505, 4957, 766, -9136, 4632, -5022, -9999, 5361, 2732, 7831, -501, -4650, 7236, 3682, -2438, 5574, -8230, -9669, -7442, 7966, -2905, 7629, 7137, 200, -8670, -749, 2228, 458, 7889, -3668, -5350, -3261, 6741, -6953, 4800, 3372, 6662, -1018, 8523, 3164, 3577, 9720, -6826, -1574, -7875, -2796, -1078, -4755, 4926, 3368, 4302, 9254, 6410, -4689, 7878, 2461, 8233, -6688, 5904, 4735, -2940, 8830, 9976, -3674, 4222, -1446, 6187, -3181, -8882, 5487, -6939, -7885, 3786, -6234, -1062, -4553, -5709, 8459, 5008, 3352, 6586, 537, -7610, 3261, 8246, -2105, 5107, 7957, -7886, -2925, -2541, -7449, 9521, 5073, -239, -8054, -4379, -8323, -6485, -4828, -5294, -2720, 595] console.log(list1) function enlist(l, num) { //comparo una lista con un numero unico que sale de la lista madre y lo incerto en una lista nueva segun su orden con respecto a ella for(let numOfList of l){ if (num <= numOfList) { l.splice(l.indexOf(numOfList),0,num) return l }else if(num > numOfList){ if(num < l[l.indexOf(numOfList)+1]){ l.splice(l.indexOf(numOfList)+1,0,num) return l }else if (l.indexOf(numOfList)+1 === l.length){ l.push(num) return l }else{ continue } } } } function insertionSort2(l) { //funcion madre que entrega los datos para ser ordenados a la funcion enlist() let limit = l.length let listReturn = [] listReturn.push(l[0]) l.shift() while(listReturn.length < limit){ listReturn = enlist(listReturn,l[0]) l.shift() } console.log(listReturn) return listReturn } insertionSort2(list1) </code>
Mi solución para C#
class Insercion { /// <summary> /// La funcion InsertionSort recorre un array posición por posición y en caso de ser menor, /// lo coloca en la posición indicada para ordenar de menor a mayor. /// </summary> /// <param name="p_array_entrada"> El array con los elementos para ordenar</param> public void InsertionSort(int[] p_array_entrada) { //Declaracion de variables auxiliares i e j int i, j; //Variable auxiliar para almacenar el valor actual int valor_actual; for ( i = 1; i < p_array_entrada.Length; i++ ) { valor_actual = p_array_entrada[i]; j = i - 1; while ( j >= 0 && p_array_entrada[j] > valor_actual) { p_array_entrada[j + 1] = p_array_entrada[j]; j -= 1; }// Final de: while ( j >= 0 && p_array_entrada[j] < valor_actual) p_array_entrada[j + 1] = valor_actual; }// Final de: for ( i = 0; i < p_array_entrada.Length; i++ ) }// Final de: public void InsertionSort(int [] p_array_entrada) /// <summary> /// Funcion para recorrer el array y mostrarlo por consola. /// </summary> /// <param name="p_array_entrada"> El Array a mostrar.</param> public void MostrarArray( int[] p_array_entrada ) { // Por cada uno de los valores dentro del array de entrada Console.Write("- "); foreach (int numero in p_array_entrada) { // Mostrar por consola Console.Write(" {0} ",numero); } Console.WriteLine(" - "); }// Final de: public void MostrarArray(int[] p_array_entrada) /// <summary> /// Llama a las funciones necesarias para mostrar el array original por consola, ordenarlo y mostrar la nueva salida. /// </summary> /// <param name="p_array_entrada"> El array a ordenar</param> public void OrdenarConInsertionSort( int[] p_array_entrada ) { // Mensaje de Bienvenida Console.WriteLine("------------------------------------------------------------"); Console.WriteLine("Ejercicio Platzi - Mi solución de Insertion Sort para C#."); Console.WriteLine("------------------------------------------------------------"); // Mostrar Array original Console.WriteLine("Array Original:"); MostrarArray(p_array_entrada); Console.WriteLine("------------------------------------------------------------"); // Mostrar Array Ordenado con Insertion Sort Console.WriteLine("Array ordenado con Insertion Sort:"); InsertionSort(p_array_entrada); MostrarArray(p_array_entrada); Console.WriteLine("------------------------------------------------------------"); Console.WriteLine("Finalizado - ¡Nunca pares de aprender! 8) "); Console.WriteLine("------------------------------------------------------------"); }// Fin de: public void OrdenarConInsertionSort() // Codigo para ejecutar en el main // //Insercion insercion = new Insercion(); //int[] p_array_entrada = new int[] { 5, 10, 20, 30, 4, 3 }; //insercion.OrdenarConInsertionSort(p_array_entrada); //Console.ReadKey(); }// Final de: class Insercion```