Stooge sort

Stooge sort (Сортировка по частям[1], Блуждающая сортировка[2]) — рекурсивный алгоритм сортировки с временной сложностью . Время работы алгоритма, таким образом, крайне большое по сравнению с эффективными алгоритмами сортировки, такими, как Сортировка слиянием.

Stooge sort
Визуализация работы алгоритма
Визуализация работы алгоритма
Предназначение Алгоритм сортировки
Структура данных Массив
Худшее время
Затраты памяти

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);
}
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);
}

Примечания

править
  1. Кормен, Т., Лейзерсон, Ч., Ривест, Р. Алгоритмы: построение и анализ = Introduction to Algorithms / Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2000. — 960 с. — ISBN 5-900916-37-5.
  2. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. — 2-е изд. — М.: Вильямс, 2005. — 1296 с. — ISBN 5-8459-0857-4.

Литература

править