CCCPaste

merge_sort.py

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)