Este es el comportamiento de los algoritmos de ordenamiento en una imagen :D

¿Cómo medir el tiempo de ejecución de algoritmos en Python?
Medir el tiempo de ejecución de nuestros algoritmos es crucial para optimizar su rendimiento. Esto puede hacerse fácilmente en Python mediante el uso de bibliotecas específicas para manejar el tiempo. Te explicaré detalladamente cómo realizar estas mediciones y notarás la importancia de entender el crecimiento de los algoritmos.
¿Qué herramientas podemos usar en Python?
Para medir el tiempo de ejecución en Python, utilizamos la biblioteca datetime. Con esta herramienta, podemos:
Ejemplo de código para medir el tiempo de ejecución
from datetime import datetime # Medir el tiempo al inicio tiempo_inicial = datetime.now() # Aquí llamamos la función que queremos medir mi_funcion() # Medir el tiempo al final tiempo_final = datetime.now() # Calcular la diferencia de tiempo tiempo_ejecucion = tiempo_final - tiempo_inicial print(tiempo_ejecucion)
¿Qué consideración debemos tener con datasets grandes?
Cuando trabajamos con grandes volúmenes de datos, como el dataset de 5,000 valores mencionado, es importante saber que:
¿Qué diferencias existen entre Selection Sort y Bubble Sort?
Al ejecutar ambos algoritmos con grandes dataset, obtenemos resultados distintos en cuanto a tiempo:
Ambos algoritmos tienen una complejidad de O(n^2), lo que significa que su eficiencia disminuye de manera exponencial con el aumento de datos. Sin embargo, en implementación, el Selection Sort logra un mejor rendimiento debido a su lógica más simple.
¿Por qué el tiempo de ejecución no siempre es el mejor indicador?
El tiempo de ejecución depende de:
Es crucial enfocar la optimización en la complejidad del algoritmo más que en el tiempo de ejecución. Una función matemática indica si un algoritmo tiene muchos ciclos anidados, característica que afecta directamente el rendimiento.
Con estos conocimientos, ya tienes las bases para evaluar y mejorar la eficiencia de tus algoritmos en Python. Continúa aprendiendo y perfeccionando tus habilidades, ¡el mundo de la programación está lleno de posibilidades!
Medir el tiempo de ejecución de nuestros algoritmos es crucial para optimizar su rendimiento. Esto puede hacerse fácilmente en Python mediante el uso de bibliotecas específicas para manejar el tiempo. Te explicaré detalladamente cómo realizar estas mediciones y notarás la importancia de entender el crecimiento de los algoritmos.
Para medir el tiempo de ejecución en Python, utilizamos la biblioteca datetime. Con esta herramienta, podemos:
from datetime import datetime
# Medir el tiempo al inicio
tiempo_inicial = datetime.now()
# Aquí llamamos la función que queremos medir
mi_funcion()
# Medir el tiempo al final
tiempo_final = datetime.now()
# Calcular la diferencia de tiempo
tiempo_ejecucion = tiempo_final - tiempo_inicial
print(tiempo_ejecucion)
Cuando trabajamos con grandes volúmenes de datos, como el dataset de 5,000 valores mencionado, es importante saber que:
Al ejecutar ambos algoritmos con grandes dataset, obtenemos resultados distintos en cuanto a tiempo:
Ambos algoritmos tienen una complejidad de O(n^2), lo que significa que su eficiencia disminuye de manera exponencial con el aumento de datos. Sin embargo, en implementación, el Selection Sort logra un mejor rendimiento debido a su lógica más simple.
El tiempo de ejecución depende de:
Es crucial enfocar la optimización en la complejidad del algoritmo más que en el tiempo de ejecución. Una función matemática indica si un algoritmo tiene muchos ciclos anidados, característica que afecta directamente el rendimiento.
Con estos conocimientos, ya tienes las bases para evaluar y mejorar la eficiencia de tus algoritmos en Python. Continúa aprendiendo y perfeccionando tus habilidades, ¡el mundo de la programación está lleno de posibilidades!
Este es el comportamiento de los algoritmos de ordenamiento en una imagen :D

La notación Big-O nos proporciona una manera de saber cómo se va a comportar un algoritmo en función de los argumentos que le pasemos y la escala de los mismos.
Quería mostrar un gif de la velocidad de los algoritmos pero no fue posible team platzi deberían mejorar eso 😥😥😥, de todas formas les dejo el link Velocidad de algoritmos de ordenamiento
Estos métodos son de orden O(n^2) y no exponenciales
Si se analiza a detalle ambos códigos nos daremos cuenta que tanto el Bubble Sort como el Selection Sort tienen casi la misma estructura de código, dos for anidados con un if dentro del segundo for, ahora bien, ambos algoritmos van ordenando el set en cada recorrido, ejemplo: si se ordena de menor a mayor en el caso del Bubble Sort los extremos derechos ya se consideran ordenados (números mayores) y ya no los analiza, y para el Selection sort el extremo izquierdo se considera ordenado y también ya no se analizan, la gran diferencia entre cada uno de ellos es que el Bubble Sort realiza muchos más cambios o swap entre cada recorrido y el Selection Sort sólo realiza uno en cada recorrido del set.
Otra diferencia sin duda, es que si el set de números ya está ordenado o semi-ordenado, el Selection Sort va a realizar todos los ciclo sin excepción, y en cambio para el Bubble Sort se puede implementar la verificación y saber si el set ya está ordenado y romper los ciclos y así terminar el algoritmo.
Se puede decir que depende del objetivo y uso que se le quiera dar, pero en definitiva ambos algoritmos son malos para ordenar set de números muy grandes.
Saludos.
Obtuve esta comparación luego de testar con 100, 1000, y 10000 valores a ordenar en cada oportunidad. Me pareció genial lo rápido que es Selection Sort, a pesar de que también usa un segundo ciclo.

Aquí el código
import random, timeit
from bokeh.plotting import figure, output_file, show
def selectionSort(array):
for i in range(len(array)):
auxIndex = i
for j in range(i + 1, len(array)):
if array[auxIndex] > array[j]:
auxIndex = j
array[i], array[auxIndex] = array[auxIndex], array[i]
return array
def bubbleSort(array):
n = len(array)
for i in range(n):
for j in range(0, n - i - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
def createValues(size):
return [random.randint(0, size) for i in range(size)]
def createLoop(limit):
loopLimit = limit
baseSize = 100
values = []
times = {}
for i in range(0, loopLimit):
values = createValues(baseSize)
startTime = timeit.default_timer()
bubbleSort(values.copy())
stopTime = timeit.default_timer()
finalTime = stopTime - startTime
times[f'B={baseSize}'] = finalTime
startTime = timeit.default_timer()
selectionSort(values.copy())
stopTime = timeit.default_timer()
finalTime = stopTime - startTime
times[f'S={baseSize}'] = finalTime
baseSize *= 10
return times
def createColumnsPlot(values):
x_vals = []
y_vals = []
for d in values:
x_vals.append(f'{d}')
y_vals.append(values[d])
output_file('comparing_plot.html')
fig = figure(x_range=x_vals, plot_height=350, title="Time comparing: Bubble Sort VS Selection Sort", toolbar_location=None, tools="")
fig.vbar(x=x_vals, top=y_vals, width=0.9)
fig.y_range.start = 0
show(fig)
if __name__ == "__main__":
data = createLoop(3)
createColumnsPlot(data)
Que basura de curso, pense que iban a ensenhar algoritmos como QuickSort o MergeSort, decepcionado totalmente
El Bubble Sort como el Selection Sort tienen casi la misma estructura de código, dos for anidados con un if dentro del segundo for, ahora bien, ambos algoritmos van ordenando el set en cada recorrido, ejemplo: si se ordena de menor a mayor en el caso del Bubble Sort los extremos derechos ya se consideran ordenados (números mayores) y ya no los analiza, y para el Selection sort el extremo izquierdo se considera ordenado y también ya no se analizan, la gran diferencia entre cada uno de ellos es que el Bubble Sort realiza muchos más cambios o swap entre cada recorrido y el Selection Sort sólo realiza uno en cada recorrido del set. Otra diferencia sin duda, es que si el set de números ya está ordenado o semi-ordenado, el Selection Sort va a realizar todos los ciclo sin excepción, y en cambio para el Bubble Sort se puede implementar la verificación y saber si el set ya está ordenado y romper los ciclos y así terminar el algoritmo.
Investigacion bien chingona guardado cuatro y media am.docx xD jajajaja crack!!
es verdad le toma el doble de tiempo 