def merge_sort(arr): """ Implementación del algoritmo Merge Sort. Divide la lista en mitades, ordena cada mitad y luego las fusiona ordenadamente. """ if len(arr) <= 1: return arr # Dividir la lista en dos mitades mid = len(arr) // 2 left = arr[:mid] right = arr[mid:] # Llamada recursiva para ordenar ambas mitades left_sorted = merge_sort(left) right_sorted = merge_sort(right) # Combinar las dos mitades ordenadas return merge(left_sorted, right_sorted) def merge(left, right): """ Fusiona dos listas ordenadas en una sola lista ordenada. """ result = [] i = j = 0 # Comparar elementos y fusionar while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 # Agregar elementos restantes (si los hay) result.extend(left[i:]) result.extend(right[j:]) return result # Ejemplo de uso if __name__ == "__main__": data = [38, 27, 43, 3, 9, 82, 10] print("Lista original:", data) sorted_data = merge_sort(data) print("Lista ordenada:", sorted_data)