Stooge sort
Stooge sort | |
---|---|
Визуализация работы алгоритма | |
Предназначение | Алгоритм сортировки |
Структура данных | Массив |
Худшее время | |
Затраты памяти |
Stooge sort (Сортировка по частям[1], Блуждающая сортировка[2]) — рекурсивный алгоритм сортировки с временной сложностью . Время работы алгоритма, таким образом, крайне большое по сравнению с эффективными алгоритмами сортировки, такими, как Сортировка слиянием.
Aлгоритм сортировки
Алгоритм Stooge sort заключается в следующем:
- Если значение элемента в конце списка меньше, чем значение элемента в начале, то поменять их местами.
- Если есть 3 или более элементов в текущем подмножестве списка, то:
- Рекурсивно вызвать сортировку для первых 2/3 списка
- Рекурсивно вызвать сортировку для последних 2/3 списка
- Рекурсивно вызвать сортировку для первых 2/3 списка снова
- Иначе: конец подпрограммы.
Реализация на языках программирования
Псевдокод
function stoogesort(array L, i = 0, j = length(L)-1) if L[j] < L[i] then swap(L[i], L[j]) if (j - i) > 1 then t = (j - i + 1)/3 stoogesort(L, i, j-t) stoogesort(L, i+t, j) stoogesort(L, i, j-t) return L
Си
void stoogesort(int *item, int left, int right) { int tmp, k; if(item[left] > item[right]) { tmp = item[left]; item[left] = item[right]; item[right] = tmp; } if((left+1) >= right) return; k = (int)((right-left+1)/3); stoogesort(item, left, right-k); stoogesort(item, left+k, right); stoogesort(item, left, right-k); }
JavaScript
function stoogesort(item, left, right) { if(left === undefined) left = 0; if(right === undefined) right = item.length-1; var tmp, k; if(item[left] > item[right]) { tmp = item[left]; item[left] = item[right]; item[right] = tmp; } if((left+1) >= right) return; k = Math.floor((right-left+1)/3); stoogesort(item, left, right-k); stoogesort(item, left+k, right); stoogesort(item, left, right-k); }
Примечания
- ↑ Кормен, Т., Лейзерсон, Ч., Ривест, Р. Алгоритмы: построение и анализ = Introduction to Algorithms / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2000. — 960 с. — ISBN 5-900916-37-5.
- ↑ Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4.
Литература
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, Клифорд. Глава 7. Быстрая сортировка // Алгоритмы: построение и анализ = Introduction to Algorithms. — 2-e издание. — М.: «Вильямс», 2005. — ISBN 5-8459-0857-4.