Сортировка

Редакция Без Сменки
Честно. Понятно. С душой.

Сортировка — упорядочивание элементов в списке.

Потребность в сортировках встречается во многих задачах.

  • они нужны для поиска и представления данных.
  • некоторые задачи с неотсортированными данными решить сложно.

Отсортируем список А по возрастанию:
А= [31, 24, 88, 91, 10, 6, 54, 78]

Простая сортировка: организовать два цикла, сравнивать i-ый элемент со всеми последующими, если они идут не в нужном порядке — менять местами.

Такой метод понятен, но он имеет недостаток быстродействия. Происходит слишком много операций сравнения. При нескольких элементов сортировка сработает, а при больших данных нет. В промышленной разработке такая сортировка не используется.

Варианты сортировок:

  • Пузырьковая сортировка:
  • Шейкерная сортировка:
  • Сортировка подсчетом:
  • Сортировка вставками:
  • Быстрая сортировка и другие.

Способов много, главное их отличие друг от друга время работы и сложность.
В следующих шагах рассмотрим методы работы и реализации некоторых сортировок 🙂

Сортировка Пузырьком

Сортировка простым обменом или сортировка пузырьком — простой алгоритм сортировки.

Алгоритм сортировки:

  • сравнить текущий элемент со следующим;
  • если следующий элемент больше/меньше текущего, поменять их местами;
  • если массив отсортирован, закончить алгоритм, иначе перейти к шагу 1.

В каждом проходе внешнего цикла совершается серия обменов так, что наибольший элемент передвигается в конец массива перед элементом, который поместился туда на прошлой итерации.
Процесс происходит до тех пор, пока массив не будет отсортирован.

📍Внешний цикл в худшем варианте повторится N-1 раз, где N-кол-во элементов списка для сортировки).

Сортировка Подсчётом

Иногда сортируемые элементы имеют небольшой диапазон возможных значений.

Например: нужно отсортировать список натуральных чисел, каждое из которых меньше 1000 -> список чисел огромный, но сами числа лежат в очень узком диапазоне.

Для таких целей используется алгоритм сортировки подсчётом.

Как он работает? 😯

  • Найти максимальное значение в списке;
  • Создать вспомогательный список счётчиков повторений counters (количество ячеек этого списка = максимальному значению начального списка);
  • Пройти по начальному списку и увеличить счетчики, равные значению текущего элемента в вспомогательном списке;
  • Составить из списка счётчиков последовательность: число на индексе i встречается counters[i] раз.

Подробная реализация на картинке 👇

Рассмотрим пример:

Есть список a=[3,1,5,1,6,7,6,5]
max значение = 7. Значит в вспомогательном списке будет 7 ячеек: counters=[0,0,0,0,0,0,0].

Проходим по списку а:
a[0]=3, увеличиваем counters[3] на 1: сounters[3]=0+1=1
a[1]=1, сounters[1]=0+1=1
a[2]=5, сounters[5]=0+1=1
a[3]=1, сounters[1]=1+1=2
a[4]=6, сounters[6]=0+1=1
a[5]=7, сounters[7]=0+1=1
a[6]=6, сounters[6]=1+1=2
a[7]=5, сounters[5]=1+1=2

Незаполненные ячейки остаются пустыми.

Записываем ответ: 2 раза “1”, 0 раз “2”, 1 раз “3”, 0 раз “4”, 2 раза “5”, 2 раза “6”, 1 раз “7”=> 1 1 3 5 5 6 6 7

Сортировка Хоара

Быстрая сортировка или сортировка Хоара, один из самых быстрых универсальных алгоритмов сортировки массивов. Именно он применяется в стандартных функциях сортировки во многих ЯП (в Python — sort() ).

Быстрая сортировка относится к алгоритмам «разделяй и властвуй» (парадигма разделения одной подзадачи на несколько меньшего размера).

Алгоритм состоит из трёх шагов:

  • Выбрать элемент из массива. Назовём его опорным.
  • Разбиение: перераспределение элементов в массиве таким образом, что элементы меньше опорного помещаются перед ним, а больше или равные после.
  • Рекурсивно применить первые два шага к двум подмассивам слева и справа от опорного элемента. Рекурсия не применяется к массиву, в котором только один элемент или отсутствуют элементы.

 

 

Где вы учитесь?

Вам также будет интересно

Типы превращения насекомых
① Развитие с неполным превращением идёт следующим образом: на свет появляется личинка, похожая на взрослый организм, однако отсутствуют некоторые...
ОБРАБОТКА ЧИСЕЛ В N СС
Задача: x = int(input()) a=0; b=0 while x > 0: if x%2 == 0: a += 1 else: b += x%6 x = x//6 print(a, b) Необходимо указать наименьшее...
Борьба за власть
✉️ В 1922 году Ленин составляет «Письмо к съезду», в котором дает характеристику всех ведущих деятелей партии большевиков. Под горячую руку попали...
Суффикс -fy в глаголах
Если ты любишь Гарри Поттера (а кто ж его не любит), то помнишь, конечно, заклинание «Остолбеней». Оно супер хайповое в мире магов, и им усмиряли и...
Виды источников права
Право выражается в источниках права, которые представляют собой внешние официально-документальные формы выражения и закрепления норм права, исходящих...
ОСНОВНЫЕ ПАРОНИМЫ
Сегодня мы с тобой разберем основные паронимы, которые встречаются на экзамене. 🔸 одеть кого-то, надеть на кого-то или на себя 🔸 адресант...

0 комментария

Авторизуйтесь, чтобы оставить комментарий.