Jump to content

марионетка сортировка

марионетка сортировка
Визуализация сортировки Stooge (показывает только свопы).
Сорт Алгоритм сортировки
Структура данных Множество
Худшая производительность
Наихудшая пространственная сложность

Stooge sort — это рекурсивный алгоритм сортировки . Он примечателен своей исключительно плохой временной сложностью . = Таким образом, время работы алгоритма медленнее по сравнению с разумными алгоритмами сортировки и медленнее, чем пузырьковая сортировка , канонический пример довольно неэффективной сортировки. Однако он более эффективен, чем Slowsort . Название происходит от «Трех марионеток» . [1]

Алгоритм определяется следующим образом:

  • Если значение в начале больше значения в конце, поменяйте их местами.
  • Если в списке три и более элементов, то:
    • Stooge сортирует первые 2/3 списка
    • Stooge сортирует последние 2/3 списка
    • Stooge снова отсортирует начальные 2/3 списка

Важно получить размер целочисленной сортировки, используемый в рекурсивных вызовах, округлив 2/3 вверх , например, округление 2/3 от 5 должно давать 4, а не 3, поскольку в противном случае сортировка может привести к сбою для определенных данных.

Выполнение

[ редактировать ]

Псевдокод

[ редактировать ]
 function stoogesort(array L, i = 0, j = length(L)-1){
     if L[i] > L[j] then       // If the leftmost element is larger than the rightmost element
         swap(L[i],L[j])       // Then swap them
     if (j - i + 1) > 2 then   // If there are at least 3 elements in the array
         t = floor((j - i + 1) / 3)
         stoogesort(L, i, j-t) // Sort the first 2/3 of the array
         stoogesort(L, i+t, j) // Sort the last 2/3 of the array
         stoogesort(L, i, j-t) // Sort the first 2/3 of the array again
     return L
 }
-- Not the best but equal to above 

stoogesort :: (Ord a) => [a] -> [a]
stoogesort [] = []
stoogesort src = innerStoogesort src 0 ((length src) - 1)

innerStoogesort :: (Ord a) => [a] -> Int -> Int -> [a]
innerStoogesort src i j 
    | (j - i + 1) > 2 = src''''
    | otherwise = src'
    where 
        src'    = swap src i j -- need every call
        t = floor (fromIntegral (j - i + 1) / 3.0)
        src''   = innerStoogesort src'   i      (j - t)
        src'''  = innerStoogesort src'' (i + t)  j
        src'''' = innerStoogesort src''' i      (j - t)

swap :: (Ord a) => [a] -> Int -> Int -> [a]
swap src i j 
    | a > b     =  replaceAt (replaceAt src j a) i b
    | otherwise = src
    where 
        a = src !! i
        b = src !! j

replaceAt :: [a] -> Int -> a -> [a]
replaceAt (x:xs) index value
    | index == 0 = value : xs
    | otherwise  =  x : replaceAt xs (index - 1) value
  1. ^ «CSE 373» (PDF) . курсы.cs.washington.edu . Проверено 14 сентября 2020 г.

Источники

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fb2d78c64df265461f8115a83af084c9__1707141300
URL1:https://arc.ask3.ru/arc/aa/fb/c9/fb2d78c64df265461f8115a83af084c9.html
Заголовок, (Title) документа по адресу, URL1:
Stooge sort - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)