Сортировка выбором.


Допустим, у Вас на компьютере записана музыка и для каждого исполнителя хранится счётчик воспроизведений. Вы хотите отсортировать список по убыванию счётчика воспроизведений, чтобы самые любимые исполнители стояли на первых местах.
Одно из возможных решений - пройти по списку и найти исполнителя с наибольшим количеством воспроизведений. Этот исполнитель добавляется в новый список. Потом то же самое происходит со следующим по количеству воспроизведений исполнителем. Продолжая действовать так, мы получаем отсортированный список.

В итоге, чтобы найти исполнителя с наибольшим значением счётчика воспроизведения, необходимо проверить каждый элемент в списке. Это делается за время O(n). При каждом выполнении операций количество элементов, которые нужно проверить, сокращается. Со временем всё сведётся к проверке всего одного элемента. И общее время выполнения сводится к O(n2).
Алгоритм сортировки выбором лёгок для понимания, но медленно работает.

def my_function(music):
    listen_max = 0
    for i in music.values():    
        listen_max = i if i > listen_max else listen_max
    new_unit = str
    for a, b in music.items():
        new_unit = a if b == listen_max else new_unit
    return new_unit


# Дан словарь с композициями и количеством прослушиваний для каждой
music = {
    "МАРИ КРАЙМБРЕРИ - Мне Так Повезло": 50,
    "РУКИ ВВЕРХ - Чёрное Море": 90,
    "MARY GU - Обожай": 80,
    "АНИ ЛОРАК - Рядом, Но Не Вместе": 40,
    "NATAN, СЛАВА - Ой всё": 70,
    "БЬЯНКА - Любимый дождь": 30,
    "JONY - Воздушный Сарафан": 100,
    "ОЛЕГ МАЙАМИ - Мельница": 20,
    "GAYAZOV$ BROTHER$ - Невеста": 60,
    "КОРОЛЁВА НАТАША - Обниму": 20
}

music_sort = list()                                             # создадим список, в который будем складывать композиции в порядке убывания популярности
for i in range (0, len(music)):                                 # обработаем наш словарь в цикле столько раз, сколько у нас элементов в словаре, каждый раз выкидывая один элемент из словаря
    result = my_function(music)
    music_sort.append(result)
    del music[result]

for i in music_sort:
    print(i)