Сортування обміном або сортування бульбашкою — це простий алгоритм сортування.
Клас | Алгоритм сортування |
---|---|
Структура даних | Масив |
Найгірша швидкодія | О(n²) |
Найкраща швидкодія | О(n) |
Середня швидкодія | О(n²) |
Просторова складність у найгіршому випадку | О(n) загальний, O(1) допоміжний |
Оптимальний | Ні |
Принцип роботи
Алгоритм працює таким чином — у поданому наборі даних (списку чи масиві) порівнюються два сусідні елементи. Якщо один з елементів не відповідає критерію сортування (є більшим, або ж, навпаки, меншим за свого сусіда), то ці два елементи міняються місцями. Прохід по списку продовжується доти, доки дані не будуть відсортованими. Алгоритм отримав свою назву від того, що процес сортування за ним нагадує поведінку бульбашок повітря у резервуарі з водою. Оскільки для роботи з елементами масиву він використовує лише порівняння, це сортування на основі порівнянь.
Аналіз
Продуктивність
Складність алгоритму у найгіршому випадку рівна О(n²), де n — кількість елементів для сортування. Існує чимало значно ефективніших алгоритмів, наприклад, з найгіршою ефективністю рівною O(n log n). Тому даний алгоритм має низьку ефективність у випадках, коли N є досить великим, за винятком рідкісних конкретних випадків, коли заздалегідь відомо, що масив з самого початку буде добре відсортований.
Кролики і черепахи
Позиції елементів, що підлягають сортуванню відіграють велику роль у питанні продуктивності даного алгоритму. Великі елементи на початку списку не являють проблему, оскільки вони досить швидко зміщуються на свої місця. Однак, малі елементи у кінці списку переміщуються на його початок дуже повільно. Це призвело до того, що обидва типи елементів було названо кролями і черепахами, відповідно.
З метою підвищення швидкодії алгоритму, у свій час було здійснено чимало зусиль для зменшення кількості «черепах». Сортування перемішуванням є порівняно непоганим, однак, усе ще у своєму найгіршому випадку має складність O(n2). Сортування гребінцем спершу порівнює великі елементи один з одним, а вже тоді поступово переходить до все менших і менших. Його середньостатистична швидкість приблизно рівна такій в алгоритмі Швидке сортування.
Приклад реалізації крок за кроком
Візьмемо масив чисел «5 1 4 2 8», і за допомогою даного алгоритму, відсортуємо його від найменшого до найбільшого елементу. На кожному кроці, елементи, виділені жирним шрифтом будуть порівнюватись.
Перший прохід:
(5 1 4 2 8) (1 5 4 2 8) Тут, алгоритм порівнює перші два елементи, і міняє їх місцями.
(1 5 4 2 8) (1 4 5 2 8)
(1 4 5 2 8) (1 4 2 5 8)
(1 4 2 5 8) (1 4 2 5 8) Тут порівнювані елементи знаходяться на своїх місцях, тож алгоритм не міняє їх місцями.
Після першого проходу масиву найбільший елемент гарантовано опинився на останній позиції, тому в подальшому можна виключити його з роботи.
Другий прохід:
(1 4 2 5 8) (1 4 2 5 8)
(1 4 2 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8) Після другого проходу два найбільших елементи масиву гарантовано опинилися на своїх позиціях, тому в подальшому можна виключити їх з роботи.
Тепер наш масив повністю відсортований, однак, алгоритм цього ще не знає. Йому потрібен ще один «пустий» прохід, під час якого він не поміняє місцями жодного елементу.
Третій прохід:
(1 2 4 5 8) (1 2 4 5 8)
(1 2 4 5 8) (1 2 4 5 8)
Нарешті, масив відсортовано, і алгоритм може припинити свою роботу.
Реалізація
Алгоритм можна виразити як (масив зі стартовим індексом 0):
процедура бульбашка( A : список елементів придатних для сортування ) повторювати переставлені = хиба для i = 1 включно до довжина(A) - 1 робити: /* якщо ця двійка невпорядкована */ якщо A[i-1] > A[i] тоді /* поміняти місцями і запам'ятати, що щось змінилось */ переставити( A[i-1], A[i] ) переставлені = істина кінець якщо кінець для доки не переставлені кінець процедури
На практиці
Хоча алгоритм є одним із найпростіших алгоритмів сортування, його ефективність є досить низькою, і він погано підходить для сортування великих списків. Більшість інших алгоритмів з такою ж швидкодією O(n2) є ефективнішими за алгоритм сортування бульбашками, наприклад, сортування включенням.
Через свою простоту алгоритм часто використовується для пояснення студентам концепції алгоритмів, зокрема алгоритмів сортування. Однак деякі дослідники, як то (Owen Astrachan), ретельно дослідивши даний алгоритм, стверджують, що він настільки поганий і неефективний, що вони навіть не використовуватимуть його як приклад у своїй викладацькій діяльності.
Дональд Кнут у своїй знаменитій праці The Art of Computer Programming прийшов до висновку, що «немає жодних підстав рекомендувати використовувати даний алгоритм, окрім хіба що через примітну назву і через те, що він є лідером у кількості цікавих теоретичних проблем», частину з яких він обговорює у своїй праці.
Сортування бульбашкою під час своєї роботи є асимптоматичним еквівалентом алгоритму сортування включенням у своєму найгіршому випадку, однак обидва алгоритми дуже сильно відрізняються кількістю необхідних операцій переміщення. Результати низки експериментів, наприклад, проведених також підтверджують той факт, що продуктивність алгоритму сортування включенням є значно вищою. Тому багато сучасних посібників з алгоритмів навіть не згадують про алгоритм сортування бульбашками і віддають перевагу сортуванню включеннями.
Сортування бульбашкою також погано використовує можливості сучасних мікропроцесорів. Воно вимагає щонайменше удвічі більше операцій, ніж сортування включенням, удвічі більше кешу пам'яті, і асимптоматично більше . Результати експериментів, проведених , показали, що сортування рядка за алгоритмом сортування бульбашками у п'ять разів повільніше за сортування того ж рядка за алгоритмом сортування включенням і на 40% повільніше за сортування вибором.
Примітки
- http://www.cs.duke.edu/~ola/papers/bubble.pdf
- Owen Astrachan. Bubble Sort: An Archaeological Algorithmic Analysis. SIGCSE 2003. (pdf)
Джерела
- Дональд Кнут. Sorting and Searching // The Art of Computer Programming. — Massachusetts : Addison–Wesley, 1998. — Т. 3. — 780 с. — .(англ.)
- Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. 2.2 Аналіз алгоритмів. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Sorting in the Presence of Branch Prediction and Caches
Посилання
- Animated Sorting Algorithms: Bubble Sort — графічна демонстрація роботи алгоритму.
- Наочна демонстрація бульбашкового сортування угорськими танцюристами.
- Bubble Sort Demonstration
- Lafore's Bubble Sort
- Sorting Applets in C++
- C++ Program — Bubble Sort
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Sortuvannya obminom abo sortuvannya bulbashkoyu ce prostij algoritm sortuvannya Sortuvannya bulbashkoyuKlas Algoritm sortuvannyaStruktura danih MasivNajgirsha shvidkodiya O n Najkrasha shvidkodiya O n Serednya shvidkodiya O n Prostorova skladnist u najgirshomu vipadku O n zagalnij O 1 dopomizhnijOptimalnij NiStatichna vizualizaciya sortuvannya bulbashkoyuNaochna demonstraciya algoritmu Princip robotiAlgoritm pracyuye takim chinom u podanomu nabori danih spisku chi masivi porivnyuyutsya dva susidni elementi Yaksho odin z elementiv ne vidpovidaye kriteriyu sortuvannya ye bilshim abo zh navpaki menshim za svogo susida to ci dva elementi minyayutsya miscyami Prohid po spisku prodovzhuyetsya doti doki dani ne budut vidsortovanimi Algoritm otrimav svoyu nazvu vid togo sho proces sortuvannya za nim nagaduye povedinku bulbashok povitrya u rezervuari z vodoyu Oskilki dlya roboti z elementami masivu vin vikoristovuye lishe porivnyannya ce sortuvannya na osnovi porivnyan AnalizProduktivnist Skladnist algoritmu u najgirshomu vipadku rivna O n de n kilkist elementiv dlya sortuvannya Isnuye chimalo znachno efektivnishih algoritmiv napriklad z najgirshoyu efektivnistyu rivnoyu O n log n Tomu danij algoritm maye nizku efektivnist u vipadkah koli N ye dosit velikim za vinyatkom ridkisnih konkretnih vipadkiv koli zazdalegid vidomo sho masiv z samogo pochatku bude dobre vidsortovanij Kroliki i cherepahi Poziciyi elementiv sho pidlyagayut sortuvannyu vidigrayut veliku rol u pitanni produktivnosti danogo algoritmu Veliki elementi na pochatku spisku ne yavlyayut problemu oskilki voni dosit shvidko zmishuyutsya na svoyi miscya Odnak mali elementi u kinci spisku peremishuyutsya na jogo pochatok duzhe povilno Ce prizvelo do togo sho obidva tipi elementiv bulo nazvano krolyami i cherepahami vidpovidno Z metoyu pidvishennya shvidkodiyi algoritmu u svij chas bulo zdijsneno chimalo zusil dlya zmenshennya kilkosti cherepah Sortuvannya peremishuvannyam ye porivnyano nepoganim odnak use she u svoyemu najgirshomu vipadku maye skladnist O n2 Sortuvannya grebincem spershu porivnyuye veliki elementi odin z odnim a vzhe todi postupovo perehodit do vse menshih i menshih Jogo serednostatistichna shvidkist priblizno rivna takij v algoritmi Shvidke sortuvannya Priklad realizaciyi krok za krokom Vizmemo masiv chisel 5 1 4 2 8 i za dopomogoyu danogo algoritmu vidsortuyemo jogo vid najmenshogo do najbilshogo elementu Na kozhnomu kroci elementi vidileni zhirnim shriftom budut porivnyuvatis Pershij prohid 5 1 4 2 8 displaystyle to 1 5 4 2 8 Tut algoritm porivnyuye pershi dva elementi i minyaye yih miscyami 1 5 4 2 8 displaystyle to 1 4 5 2 8 1 4 5 2 8 displaystyle to 1 4 2 5 8 1 4 2 5 8 displaystyle to 1 4 2 5 8 Tut porivnyuvani elementi znahodyatsya na svoyih miscyah tozh algoritm ne minyaye yih miscyami Pislya pershogo prohodu masivu najbilshij element garantovano opinivsya na ostannij poziciyi tomu v podalshomu mozhna viklyuchiti jogo z roboti Drugij prohid 1 4 2 5 8 displaystyle to 1 4 2 5 8 1 4 2 5 8 displaystyle to 1 2 4 5 8 1 2 4 5 8 displaystyle to 1 2 4 5 8 Pislya drugogo prohodu dva najbilshih elementi masivu garantovano opinilisya na svoyih poziciyah tomu v podalshomu mozhna viklyuchiti yih z roboti Teper nash masiv povnistyu vidsortovanij odnak algoritm cogo she ne znaye Jomu potriben she odin pustij prohid pid chas yakogo vin ne pominyaye miscyami zhodnogo elementu Tretij prohid 1 2 4 5 8 displaystyle to 1 2 4 5 8 1 2 4 5 8 displaystyle to 1 2 4 5 8 Nareshti masiv vidsortovano i algoritm mozhe pripiniti svoyu robotu RealizaciyaAlgoritm mozhna viraziti yak masiv zi startovim indeksom 0 procedura bulbashka A spisok elementiv pridatnih dlya sortuvannya povtoryuvati perestavleni hiba dlya i 1 vklyuchno do dovzhina A 1 robiti yaksho cya dvijka nevporyadkovana yaksho A i 1 gt A i todi pominyati miscyami i zapam yatati sho shos zminilos perestaviti A i 1 A i perestavleni istina kinec yaksho kinec dlya doki ne perestavleni kinec proceduriNa prakticiHocha algoritm ye odnim iz najprostishih algoritmiv sortuvannya jogo efektivnist ye dosit nizkoyu i vin pogano pidhodit dlya sortuvannya velikih spiskiv Bilshist inshih algoritmiv z takoyu zh shvidkodiyeyu O n2 ye efektivnishimi za algoritm sortuvannya bulbashkami napriklad sortuvannya vklyuchennyam Cherez svoyu prostotu algoritm chasto vikoristovuyetsya dlya poyasnennya studentam koncepciyi algoritmiv zokrema algoritmiv sortuvannya Odnak deyaki doslidniki yak to Owen Astrachan retelno doslidivshi danij algoritm stverdzhuyut sho vin nastilki poganij i neefektivnij sho voni navit ne vikoristovuvatimut jogo yak priklad u svoyij vikladackij diyalnosti Donald Knut u svoyij znamenitij praci The Art of Computer Programming prijshov do visnovku sho nemaye zhodnih pidstav rekomenduvati vikoristovuvati danij algoritm okrim hiba sho cherez primitnu nazvu i cherez te sho vin ye liderom u kilkosti cikavih teoretichnih problem chastinu z yakih vin obgovoryuye u svoyij praci Sortuvannya bulbashkoyu pid chas svoyeyi roboti ye asimptomatichnim ekvivalentom algoritmu sortuvannya vklyuchennyam u svoyemu najgirshomu vipadku odnak obidva algoritmi duzhe silno vidriznyayutsya kilkistyu neobhidnih operacij peremishennya Rezultati nizki eksperimentiv napriklad provedenih takozh pidtverdzhuyut toj fakt sho produktivnist algoritmu sortuvannya vklyuchennyam ye znachno vishoyu Tomu bagato suchasnih posibnikiv z algoritmiv navit ne zgaduyut pro algoritm sortuvannya bulbashkami i viddayut perevagu sortuvannyu vklyuchennyami Sortuvannya bulbashkoyu takozh pogano vikoristovuye mozhlivosti suchasnih mikroprocesoriv Vono vimagaye shonajmenshe udvichi bilshe operacij nizh sortuvannya vklyuchennyam udvichi bilshe keshu pam yati i asimptomatichno bilshe Rezultati eksperimentiv provedenih pokazali sho sortuvannya ryadka za algoritmom sortuvannya bulbashkami u p yat raziv povilnishe za sortuvannya togo zh ryadka za algoritmom sortuvannya vklyuchennyam i na 40 povilnishe za sortuvannya viborom Primitkihttp www cs duke edu ola papers bubble pdf Owen Astrachan Bubble Sort An Archaeological Algorithmic Analysis SIGCSE 2003 pdf DzherelaDonald Knut Sorting and Searching The Art of Computer Programming Massachusetts Addison Wesley 1998 T 3 780 s ISBN 0 201 89685 0 angl Tomas Kormen Charlz Lejzerson Ronald Rivest Kliford Stajn 2009 1990 2 2 Analiz algoritmiv Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Sorting in the Presence of Branch Prediction and CachesPosilannyaAnimated Sorting Algorithms Bubble Sort grafichna demonstraciya roboti algoritmu Naochna demonstraciya bulbashkovogo sortuvannya ugorskimi tancyuristami Bubble Sort Demonstration Lafore s Bubble Sort Sorting Applets in C C Program Bubble Sort Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi