Skip to content

Commit 873877f

Browse files
committed
Practica ordenamiento de inserción
1 parent bbb83b3 commit 873877f

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed
+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
{
2+
"metadata": {
3+
"language_info": {
4+
"codemirror_mode": {
5+
"name": "ipython",
6+
"version": 3
7+
},
8+
"file_extension": ".py",
9+
"mimetype": "text/x-python",
10+
"name": "python",
11+
"nbconvert_exporter": "python",
12+
"pygments_lexer": "ipython3",
13+
"version": "3.8.5-final"
14+
},
15+
"orig_nbformat": 2,
16+
"kernelspec": {
17+
"name": "python3",
18+
"display_name": "Python 3.8.5 64-bit ('base': conda)",
19+
"metadata": {
20+
"interpreter": {
21+
"hash": "0b2f8dbf0b57b8bf044e67a58ab62fb7d7eddb3a947c0d8f65f20e027acb81aa"
22+
}
23+
}
24+
}
25+
},
26+
"nbformat": 4,
27+
"nbformat_minor": 2,
28+
"cells": [
29+
{
30+
"source": [
31+
"# Ordenamiento por Inserción (Insertion Sort)\n",
32+
"**Complejidad Algoritmica:** O(n²)\n",
33+
"\n",
34+
"En este algoritmo se ordena *\"en su lugar\"*, es decir que no se crea una nueva lista con los elementos ordenados si no que en lugar de eso se modifican los valores en memoria.\n",
35+
"\n",
36+
"## Funcionamiento\n",
37+
"1. El primer elemento esta ordenado por defición, el resto de elementos de la lista se ordenarán a partir de este.\n",
38+
"2. Se recorren los demás elementos, comparándolos con el que esta ordenado por definición. Si el elemento que se esta comparando es **mayor** que uno de los elementos ya ordenados se mueve dicho elemento un índice a la derecha y se inserta el nuevo elemento\n",
39+
"3. Se repite el paso anterior con los todos los elementos de la lista, es decir, se toma un elemento sin ordenar, se compara con cada uno de los que no están ordenados y se inserta en el lugar correspondiente."
40+
],
41+
"cell_type": "markdown",
42+
"metadata": {}
43+
},
44+
{
45+
"source": [
46+
"## Implementación\n",
47+
"1. Crear la lista con los elementos que se quieren ordenar"
48+
],
49+
"cell_type": "markdown",
50+
"metadata": {}
51+
},
52+
{
53+
"cell_type": "code",
54+
"execution_count": 1,
55+
"metadata": {},
56+
"outputs": [],
57+
"source": [
58+
"elements_list = [3, 14, 5, 2, 1, 8, 13, 24]"
59+
]
60+
},
61+
{
62+
"source": [
63+
"2. Recorrer los elementos e irlos ordenando en base a los elementos que ya están ordenados."
64+
],
65+
"cell_type": "markdown",
66+
"metadata": {}
67+
},
68+
{
69+
"cell_type": "code",
70+
"execution_count": 2,
71+
"metadata": {},
72+
"outputs": [
73+
{
74+
"output_type": "stream",
75+
"name": "stdout",
76+
"text": [
77+
"FOR: current_value = 14\tcurrent_position = 1\n[3, 14, 5, 2, 1, 8, 13, 24]\nFOR: current_value = 5\tcurrent_position = 2\n--> WHILE: current_value = 5\tcurrent_position = 1\n[3, 5, 14, 2, 1, 8, 13, 24]\nFOR: current_value = 2\tcurrent_position = 3\n--> WHILE: current_value = 2\tcurrent_position = 2\n--> WHILE: current_value = 2\tcurrent_position = 1\n--> WHILE: current_value = 2\tcurrent_position = 0\n[2, 3, 5, 14, 1, 8, 13, 24]\nFOR: current_value = 1\tcurrent_position = 4\n--> WHILE: current_value = 1\tcurrent_position = 3\n--> WHILE: current_value = 1\tcurrent_position = 2\n--> WHILE: current_value = 1\tcurrent_position = 1\n--> WHILE: current_value = 1\tcurrent_position = 0\n[1, 2, 3, 5, 14, 8, 13, 24]\nFOR: current_value = 8\tcurrent_position = 5\n--> WHILE: current_value = 8\tcurrent_position = 4\n[1, 2, 3, 5, 8, 14, 13, 24]\nFOR: current_value = 13\tcurrent_position = 6\n--> WHILE: current_value = 13\tcurrent_position = 5\n[1, 2, 3, 5, 8, 13, 14, 24]\nFOR: current_value = 24\tcurrent_position = 7\n[1, 2, 3, 5, 8, 13, 14, 24]\n"
78+
]
79+
}
80+
],
81+
"source": [
82+
"# Recorre los elementos de la lista saltandose el primero pues este esta ordenado por definición\n",
83+
"for i in range(1, len(elements_list)):\n",
84+
" current_value = elements_list[i]\n",
85+
" current_position = i\n",
86+
"\n",
87+
" print(f'FOR: current_value = {current_value}\\tcurrent_position = {current_position}')\n",
88+
"\n",
89+
" # Mientras la posición actual sea > 0 y el elemento anterior sea mayor que el elemento actual\n",
90+
" # se hace un intercambio\n",
91+
" while current_position > 0 and elements_list[current_position - 1] > current_value:\n",
92+
" # Pasa el elemento actual a la posición anterior\n",
93+
" elements_list[current_position] = elements_list[current_position - 1]\n",
94+
"\n",
95+
" # Se decrementa esta variable para evitar que se asignen elementos a índices \n",
96+
" # que no existen y el array se desborde.\n",
97+
" # Por ejemplo, en caso de que todos los elementos anteriores sean mayores al \n",
98+
" # elemento actual el while se ejecutará hasta poner el elemento actual \n",
99+
" # en la primera posición y luego se detendrá\n",
100+
" current_position -= 1 \n",
101+
"\n",
102+
" print(f'--> WHILE: current_value = {current_value}\\tcurrent_position = {current_position}')\n",
103+
" \n",
104+
" # Dado que si se entra en el while los elementos se corren una posición a la izquierda \n",
105+
" # esta línea se encarga de asignar el valor actual al espacio que quedaría cada vez \n",
106+
" # que se intercabien los elementos en el while\n",
107+
" elements_list[current_position] = current_value\n",
108+
" print(elements_list)"
109+
]
110+
},
111+
{
112+
"source": [
113+
"3. Imprimir la lista ordenada"
114+
],
115+
"cell_type": "markdown",
116+
"metadata": {}
117+
},
118+
{
119+
"cell_type": "code",
120+
"execution_count": 3,
121+
"metadata": {},
122+
"outputs": [
123+
{
124+
"output_type": "stream",
125+
"name": "stdout",
126+
"text": [
127+
"[1, 2, 3, 5, 8, 13, 14, 24]\n"
128+
]
129+
}
130+
],
131+
"source": [
132+
"print(elements_list)"
133+
]
134+
}
135+
]
136+
}
37.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)