Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

03D

20H

11M

51S

1

Merge Sort combinado con Insertion Sort

Un algoritmo muy usado en ordenamiento es el merge sort como vimos en la clase de este curso. En la práctica ese método se combina con el insertion sort porque el insertion sort aunque es ineficiente con listas grandes es muy eficiente con listas pequeñas por ejemplo de 10 elementos.

Este código combina los dos algoritmos que vimos en clase. El punto donde se combinan es aquí

if n <= INSERT_SORT_THRESHOLD:
        return insert_sort(list)

la variable INSERT_SORT_THRESHOLD indica cuantos elementos debe tener la lista para iniciar un insertion sort. Un valor de cero indica que siempre usar merge sort

INSERT_SORT_THRESHOLD = 10

def insert_sort(list):
    n = len(list)
    ifn == 0:
        returnlistfor i inrange(1, n):        
        itm = list[i]
        index = i
        #move from i-1 to 0                
        for j inrange(i - 1, -1, -1):
            if itm < list[j] :
                index = jlist[j+1] = list[j]
            else:
                breaklist[index] = itm        
    returnlist

def merge_sort(list):
    n = len(list)
    ifn <= 1:
        returnlistifn <= INSERT_SORT_THRESHOLD:
        return insert_sort(list)

    middle = n// 2
    left = merge_sort(list[:middle])
    right = merge_sort(list[middle:])

    left_c = 0
    right_c = 0
    k = 0

    while left_c < len(left) and right_c < len(right):
        if left[left_c] < right[right_c]:
            list[k] = left[left_c]
            left_c += 1
        else:
            list[k] = right[right_c]
            right_c += 1
        k += 1

    while left_c < len(left):
        list[k] = left[left_c]
        k += 1
    
    while right_c < len(right):
        list[k] = right[right_c]
        k += 1

    returnlist

import random
random_list = [random.randint(0, 1000) for x inrange(0, 20)]
print(random_list)
print('-' * 20)
print(insert_sort(random_list))
Escribe tu comentario
+ 2