Capítulo 4: El arte de clasificar
Ejercicios Prácticos: Capítulo 4
Ejercicio 1: Implementar Ordenamientos Básicos
- Escribe funciones en Python para Bubble Sort, Selection Sort e Insertion Sort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# Bubble Sort
def bubbleSort(arr):
n = len(arr)
for i in range(n-1):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Selection Sort
def selectionSort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# Insertion Sort
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
Ejercicio 2: ¡Mídalo!
- Utilizando el módulo
timeit
de Python, mide el tiempo necesario para que cada una de las funciones de ordenamiento anteriores ordene una lista de 1000 números aleatorios. ¿Cuál es la más rápida para este tamaño de entrada?
Pista: Puedes generar una lista de 1000 números aleatorios usando: import random; nums = [random.randint(1, 10000) for _ in range(1000)]
.
Ejercicio 3: Implementar Ordenamientos Avanzados
- Escribe funciones en Python para QuickSort, MergeSort y HeapSort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# QuickSort
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
# MergeSort
def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
return arr
# For HeapSort, you'll need to implement or use a heap data structure.
Ejercicio 4: Ordenando Cadenas
- Utilizando cualquiera de los algoritmos de ordenamiento que has aprendido, escribe una función que ordene una lista de cadenas basándose en su longitud. Si dos cadenas tienen la misma longitud, ordénalas lexicográficamente.
Pista: Puedes modificar el criterio de comparación en las funciones de ordenamiento para lograr esto.
Estos ejercicios deberían proporcionarte una experiencia práctica integral para este capítulo.
Ejercicios Prácticos: Capítulo 4
Ejercicio 1: Implementar Ordenamientos Básicos
- Escribe funciones en Python para Bubble Sort, Selection Sort e Insertion Sort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# Bubble Sort
def bubbleSort(arr):
n = len(arr)
for i in range(n-1):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Selection Sort
def selectionSort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# Insertion Sort
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
Ejercicio 2: ¡Mídalo!
- Utilizando el módulo
timeit
de Python, mide el tiempo necesario para que cada una de las funciones de ordenamiento anteriores ordene una lista de 1000 números aleatorios. ¿Cuál es la más rápida para este tamaño de entrada?
Pista: Puedes generar una lista de 1000 números aleatorios usando: import random; nums = [random.randint(1, 10000) for _ in range(1000)]
.
Ejercicio 3: Implementar Ordenamientos Avanzados
- Escribe funciones en Python para QuickSort, MergeSort y HeapSort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# QuickSort
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
# MergeSort
def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
return arr
# For HeapSort, you'll need to implement or use a heap data structure.
Ejercicio 4: Ordenando Cadenas
- Utilizando cualquiera de los algoritmos de ordenamiento que has aprendido, escribe una función que ordene una lista de cadenas basándose en su longitud. Si dos cadenas tienen la misma longitud, ordénalas lexicográficamente.
Pista: Puedes modificar el criterio de comparación en las funciones de ordenamiento para lograr esto.
Estos ejercicios deberían proporcionarte una experiencia práctica integral para este capítulo.
Ejercicios Prácticos: Capítulo 4
Ejercicio 1: Implementar Ordenamientos Básicos
- Escribe funciones en Python para Bubble Sort, Selection Sort e Insertion Sort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# Bubble Sort
def bubbleSort(arr):
n = len(arr)
for i in range(n-1):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Selection Sort
def selectionSort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# Insertion Sort
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
Ejercicio 2: ¡Mídalo!
- Utilizando el módulo
timeit
de Python, mide el tiempo necesario para que cada una de las funciones de ordenamiento anteriores ordene una lista de 1000 números aleatorios. ¿Cuál es la más rápida para este tamaño de entrada?
Pista: Puedes generar una lista de 1000 números aleatorios usando: import random; nums = [random.randint(1, 10000) for _ in range(1000)]
.
Ejercicio 3: Implementar Ordenamientos Avanzados
- Escribe funciones en Python para QuickSort, MergeSort y HeapSort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# QuickSort
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
# MergeSort
def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
return arr
# For HeapSort, you'll need to implement or use a heap data structure.
Ejercicio 4: Ordenando Cadenas
- Utilizando cualquiera de los algoritmos de ordenamiento que has aprendido, escribe una función que ordene una lista de cadenas basándose en su longitud. Si dos cadenas tienen la misma longitud, ordénalas lexicográficamente.
Pista: Puedes modificar el criterio de comparación en las funciones de ordenamiento para lograr esto.
Estos ejercicios deberían proporcionarte una experiencia práctica integral para este capítulo.
Ejercicios Prácticos: Capítulo 4
Ejercicio 1: Implementar Ordenamientos Básicos
- Escribe funciones en Python para Bubble Sort, Selection Sort e Insertion Sort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# Bubble Sort
def bubbleSort(arr):
n = len(arr)
for i in range(n-1):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# Selection Sort
def selectionSort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# Insertion Sort
def insertionSort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j]:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
Ejercicio 2: ¡Mídalo!
- Utilizando el módulo
timeit
de Python, mide el tiempo necesario para que cada una de las funciones de ordenamiento anteriores ordene una lista de 1000 números aleatorios. ¿Cuál es la más rápida para este tamaño de entrada?
Pista: Puedes generar una lista de 1000 números aleatorios usando: import random; nums = [random.randint(1, 10000) for _ in range(1000)]
.
Ejercicio 3: Implementar Ordenamientos Avanzados
- Escribe funciones en Python para QuickSort, MergeSort y HeapSort.
- Prueba cada función usando la lista:
[64, 34, 25, 12, 22, 11, 90]
Solución:
# QuickSort
def quickSort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quickSort(left) + middle + quickSort(right)
# MergeSort
def mergeSort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
mergeSort(L)
mergeSort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
return arr
# For HeapSort, you'll need to implement or use a heap data structure.
Ejercicio 4: Ordenando Cadenas
- Utilizando cualquiera de los algoritmos de ordenamiento que has aprendido, escribe una función que ordene una lista de cadenas basándose en su longitud. Si dos cadenas tienen la misma longitud, ordénalas lexicográficamente.
Pista: Puedes modificar el criterio de comparación en las funciones de ordenamiento para lograr esto.
Estos ejercicios deberían proporcionarte una experiencia práctica integral para este capítulo.