Сортування гнома (англ. Gnome sort) — один із найпростіших алгоритмів сортування (на думку багатьох — найпростіший). Ім'я походить від голландського садового гнома, якого ставлять між квітковими горщиками. Якщо два сусідні від гнома горщики йдуть у правильному порядку, гном йде на одну позицію вперед. Якщо ж вони у неправильному порядку - міняє ці два горщики місцями і йде на одну позицію назад (щоб знову перевірити порядок).
Клас | Алгоритм сортування |
---|---|
Структура даних | Масив |
Найгірша швидкодія | |
Найкраща швидкодія | |
Середня швидкодія |
Аналіз
Швидкодія
Алгоритм концептуально простий, і не потребує навіть вкладених циклів. Його швидкодія рівна , однак, на практиці, може працювати й швидше у режимі .
Приклад використання крок за кроком
Відсортуємо масив числових елементів [4] [2] [7] [3] від найбільшого до найменшого:
[4] [2] [7] [3] (ініціалізація. i = 1, а j = 2.)
[4] [2] [7] [3] (нічого не робити, однак, тепер i = 2, а j = 3.)
[4] [7] [2] [3] (міняємо місцями a[2] та a[1]. однак, тепер i = 1, а j й досі = 3.)
[7] [4] [2] [3] (міняємо місцями a[1] and a[0]. однак, тепер i = 1, а j й досі = 3.)
[7] [4] [2] [3] (нічого не робити, однак, тепер i = 3, а j = 4.)
[7] [4] [3] [2] (міняємо місцями a[3] and a[2]. однак, тепер i = 2, а j = 4.)
[7] [4] [3] [2] (нічого не робити, однак, тепер i = 4, а j = 5.)
на цьому місці цикл завершується, оскільки і не < 4.
Реалізація
Алгоритм можна записати в псевдокоді:
function gnomeSort(a[0..size-1]) { i := 1 j := 2 while i < size if a[i-1] <= a[i] # для сортування в спадаючому порядку замінити на ≥ i := j j := j + 1 else переставити a[i-1] та a[i] i := i - 1 if i = 0 i = j; j = j + 1; }
C++:
void
gnomeSort(int
arr[], int
n)
{
int
index = 0;
while
(index < n) {
if
(index == 0)
index++;
if
(arr[index] >= arr[index - 1])
index++;
else
{
swap(arr[index], arr[index - 1]);
index--;
}
}
return;
}
Можлива оптимізація
Можна ввести додаткову змінну для запам'ятовування позиції гнома до того, як він почав рух назад. Завдяки ній, гном після впорядкування (і переміщення назад) зможе телепортуватися на цю позицію, з якої почав свій рух назад.
Посилання
- Gnome sort
- RosettaCode.org: Реалізація алгоритму різними мовами програмування
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових для поліпшення її . (грудень 2017) |
- Gnome Sort. GeeksforGeeks (амер.). 27 червня 2016. Процитовано 23 квітня 2020.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Sortuvannya gnoma angl Gnome sort odin iz najprostishih algoritmiv sortuvannya na dumku bagatoh najprostishij Im ya pohodit vid gollandskogo sadovogo gnoma yakogo stavlyat mizh kvitkovimi gorshikami Yaksho dva susidni vid gnoma gorshiki jdut u pravilnomu poryadku gnom jde na odnu poziciyu vpered Yaksho zh voni u nepravilnomu poryadku minyaye ci dva gorshiki miscyami i jde na odnu poziciyu nazad shob znovu pereviriti poryadok Sortuvannya gnomaKlasAlgoritm sortuvannyaStruktura danihMasivNajgirsha shvidkodiyaO n 2 displaystyle O n 2 Najkrasha shvidkodiyaO n displaystyle O n Serednya shvidkodiyaO n 2 displaystyle O n 2 AnalizShvidkodiya Algoritm konceptualno prostij i ne potrebuye navit vkladenih cikliv Jogo shvidkodiya rivna O n 2 displaystyle O n 2 odnak na praktici mozhe pracyuvati j shvidshe u rezhimi Priklad vikoristannya krok za krokom Vidsortuyemo masiv chislovih elementiv 4 2 7 3 vid najbilshogo do najmenshogo 4 2 7 3 inicializaciya i 1 a j 2 4 2 7 3 nichogo ne robiti odnak teper i 2 a j 3 4 7 2 3 minyayemo miscyami a 2 ta a 1 odnak teper i 1 a j j dosi 3 7 4 2 3 minyayemo miscyami a 1 and a 0 odnak teper i 1 a j j dosi 3 7 4 2 3 nichogo ne robiti odnak teper i 3 a j 4 7 4 3 2 minyayemo miscyami a 3 and a 2 odnak teper i 2 a j 4 7 4 3 2 nichogo ne robiti odnak teper i 4 a j 5 na comu misci cikl zavershuyetsya oskilki i ne lt 4 RealizaciyaAlgoritm mozhna zapisati v psevdokodi function gnomeSort a 0 size 1 i 1 j 2 while i lt size if a i 1 lt a i dlya sortuvannya v spadayuchomu poryadku zaminiti na i j j j 1 else perestaviti a i 1 ta a i i i 1 if i 0 i j j j 1 C void gnomeSort int arr int n int index 0 while index lt n if index 0 index if arr index gt arr index 1 index else swap arr index arr index 1 index return Mozhliva optimizaciyaMozhna vvesti dodatkovu zminnu dlya zapam yatovuvannya poziciyi gnoma do togo yak vin pochav ruh nazad Zavdyaki nij gnom pislya vporyadkuvannya i peremishennya nazad zmozhe teleportuvatisya na cyu poziciyu z yakoyi pochav svij ruh nazad PosilannyaGnome sort RosettaCode org Realizaciya algoritmu riznimi movami programuvannya Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2017 Gnome Sort GeeksforGeeks amer 27 chervnya 2016 Procitovano 23 kvitnya 2020