Условия задачи:

 

Изучите и напишите алгоритм сортировки, но не пузырьковой, сортировки вставками или сортировки слиянием.

 

Решение задачи:

def insert_sorting(list_):
    for i in range(1, len(list_)):  # Начинаем со второго элемента
        value = list_[i]  # Текущий элемент для вставки
        while i > 0 and list_[i-1] > value:  # Пока предыдущий элемент больше
            list_[i] = list_[i-1]  # Сдвигаем элемент вправо
            i -= 1  # Двигаемся влево по отсортированной части
        list_[i] = value  # Вставляем `value` на найденное место
    return list_
    
    
    
def merge_sort(list_):
        if len(list_) > 1:
            mid = len(list_) // 2
            left =  list_[:mid]
            rigth = list_[mid:]
            merge_sort(left)
            merge_sort(rigth)
            left_lst = 0
            rigth_lst = 0
            list_lst = 0
            while len(left) > left_lst and len(rigth) > rigth_lst:
                if left[left_lst] >= rigth[rigth_lst]:
                    list_[list_lst] = rigth[rigth_lst]
                    rigth_lst  += 1
                else:
                    list_[list_lst] = left[left_lst]
                    left_lst += 1
                list_lst += 1
            while len(left) > left_lst:
                list_[list_lst] = left[left_lst]
                left_lst += 1
                list_lst += 1
            while len(rigth) > rigth_lst:
                list_[list_lst] = rigth[rigth_lst]
                rigth_lst += 1
                list_lst += 1
            return list_