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.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.