Перейти до основного контенту

Як працює сортування коктейлів: основні принципи та приклади

6 хв читання
2481 переглядів

Сортування коктейлів, також відоме як сортування шейкерів або сортування перемішування, - це алгоритм сортування, який ефективно працює для впорядкування масивів чисел або інших структур даних. Відмінною особливістю коктейльної сортування є те, що вона поєднує в собі переваги сортування бульбашкою і сортування вибором, що дозволяє їй бути більш ефективною.

Основна ідея коктейльної сортування полягає в порівнянні і перестановці сусідніх елементів попарно, як в сортуванні бульбашкою. Однак, на відміну від сортування бульбашок, сортування коктейлів спочатку проходить по масиву зліва направо, а потім справа наліво. Таким чином, вона звужує область, в якій елементи знаходяться в невідсортованому стані, що робить її більш ефективною і швидкою.

Приклад роботи коктейльної сортування:

Наведемо приклад сортування масиву чисел [5, 8, 1, 3, 6]:

Крок 1: Проходимо по масиву зліва направо і порівнюємо сусідні елементи. Якщо поточний елемент більше наступного, міняємо їх місцями.

[5, 8, 1, 3, 6] -> [5, 1, 8, 3, 6] -> [5, 1, 3, 8, 6] -> [5, 1, 3, 6, 8]

Крок 2: Проходимо по масиву справа наліво і порівнюємо сусідні елементи. Якщо поточний елемент менше попереднього, міняємо їх місцями.

[5, 1, 3, 6, 8] -> [5, 1, 3, 6, 8]

Кроки повторюються, поки масив повністю не буде відсортований. Таким чином, коктейльне сортування дозволяє ефективно впорядкувати масив, зберігаючи при цьому переваги двох інших популярних алгоритмів сортування.

Сортування коктейлів: основні принципи та приклади

Основна ідея коктейльної сортування полягає в тому, щоб проходити масив в обидві сторони, спочатку зліва направо, потім справа наліво. При кожному проході елементи порівнюються і змінюються, якщо необхідно, щоб найбільший елемент "сплив" в кінець масиву, а найменший елемент "опустився" в початок масиву. Таким чином, після кожного проходу найбільший елемент знаходиться в правій частині масиву, аналогічно, найменший елемент в лівій частині.

Для реалізації коктейльної сортування можна використовувати цикл while, який буде виконуватися до тих пір, поки не буде виконано умова відсутності обміну елементів між собою. Усередині циклу потрібно пройти масив в обидві сторони, порівнюючи поруч стоять елементи і змінюючи їх місцями, якщо необхідно.

Розглянемо приклад сортування коктейлів на масиві цілих чисел:

Оригінальний масивКрок 1Крок 2Крок 3
7294
2749
2479

На першому кроці відбувається прохід масиву зліва направо, і пари елементів порівнюються і міняються місцями, якщо необхідно. На другому кроці, відбувається прохід масиву справа наліво, і аналогічні операції виконуються. Після кожного кроку найбільший елемент переходить в праву частину масиву, а найменший елемент в ліву частину.

Сортування коктейлів-це вдосконалена версія сортування бульбашок і може бути ефективною при роботі з невідсортованими масивами. Вона має складність O (n^2), Як і сортування бульбашок, але в середньому працює трохи швидше. Однак для великих масивів або масивів з уже відсортованими елементами інші алгоритми сортування, такі як швидке сортування або сортування злиття, стають більш ефективними.

Алгоритм сортування коктейльної сортуванням

Алгоритм сортування коктейльної сортуванням заснований на послідовному проході по масиву елементів, порівнянні сусідніх елементів і їх обміні, якщо вони знаходяться в неправильному порядку. Цей процес виконується з обох кінців масиву, тому його називають двонаправленим.

Алгоритм сортування коктейльної сортуванням працює наступним чином:

  1. Встановлюємо змінні" початок "і" кінець " рівними першому і останньому індексу масиву відповідно.
  2. Поки "початок" менше "кінця", виконуємо наступні дії:
    • Проходимо по масиву від" початку "до" кінця " і порівнюємо кожну пару сусідніх елементів. Якщо вони знаходяться в неправильному порядку, міняємо їх місцями.
    • Зменшуємо значення" кінець " на 1.
    • Проходимо по масиву від" кінця "до" початку " і порівнюємо кожну пару сусідніх елементів. Якщо вони знаходяться в неправильному порядку, міняємо їх місцями.
    • Збільшуємо значення" початок " на 1.
  3. Повторюємо Крок 2 до тих пір, поки" початок "не стане більше або дорівнює"кінця".

Через використання двонаправленого проходу алгоритм сортування коктейльної сортуванням більш ефективний, ніж стандартна сортування бульбашкою. Він може бути використаний для сортування масивів будь - якого розміру і має складність O(n^2), де n-кількість елементів у масиві.

Приклад коду на мові C++, що реалізує алгоритм сортування:

void cocktailSort(int arr[], int n) arr[i + 1]) >if (!swapped) swapped = false;// Проход справа налево--end;for (int i = end - 1; i >= start; --i) arr[i + 1]) >++start;>>

Це основні принципи і приклади роботи алгоритму сортування коктейльної сортуванням. Це може бути корисним у ситуаціях, коли потрібно сортувати масив елементів та зберігати його відносний порядок. Однак, через його складність O(n^2), він не рекомендується для сортування великих масивів.

Опис роботи коктейльної сортування

Процес сортування починається з лівого кінця масиву і рухається вправо. Потім, справа наліво, відбувається зворотний прохід. Цей процес повторюється до тих пір, поки в процесі проходу не відбувається жодної заміни елементів місцями, що означає, що масив вже відсортований.

Коктейльна сортування ефективна для частково відсортованих масивів, так як може швидко перемістити елементи в свої остаточні позиції, здійснюючи проходи в обидві сторони.

Часова складність коктейльного сортування становить O (n^2), де n - кількість елементів у сортуваному масиві. Щоб поліпшити продуктивність алгоритму, можна використовувати оптимізації, такі як "розумна сортування", яка запам'ятовує останній Індекс, де була здійснена заміна елементів, і наступної ітерації починає свій прохід з цього індексу.