Jump to content

Slowsort

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Alexcalamaro (talk | contribs) at 05:16, 7 May 2021 (Undid revision 1021877194 by Alexcalamaro (talk)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Slowsort is a sorting algorithm. It is of humorous nature and not useful. It's based on the principle of multiply and surrender, a tongue-in-cheek joke of divide and conquer. It was published in 1986 by Andrei Broder and Jorge Stolfi in their paper Pessimal Algorithms and Simplexity Analysis[1] (a parody of optimal algorithms and complexity analysis).

Algorithm

Slowsort is a recursive algorithm.

An in-place implementation in pseudo code:

procedure slowsort(A, i, j)                           // sorts Array A[i],...,A[j]
    if i ≥ j then
        return
    m := ⌊(i+j) / 2⌋                            
    slowsort(A, i, m)                                 // (1.1)
    slowsort(A, m+1, j)                               // (1.2)
    if A[j] < A[m] then
        swap A[j] and A[m]                            // (1.3)
    slowsort(A, i, j-1)                               // (2)
  • Sort the first half recursively (1.1)
  • Sort the second half recursively (1.2)
  • Find the maximum of the whole array by comparing the results of 1.1 and 1.2 and place it at the end of the list (1.3)
  • Recursively sort the entire list without the maximum in 1.3 (2).

An implementation in Haskell (purely functional) may look as follows.

slowsort :: (Ord a) => [a] -> [a]
slowsort xs
  | length xs <= 1 = xs
  | otherwise      = slowsort xs' ++ [max llast rlast]  -- (2)
  where m     = length xs `div` 2
        l     = slowsort $ take m xs  -- (1.1)
        r     = slowsort $ drop m xs  -- (1.2)
        llast = last l
        rlast = last r
        xs'   = init l ++ min llast rlast : init r

Complexity

The runtime for Slowsort is . A lower asymptotic bound for in Landau notation is for any . Slowsort is therefore not in polynomial time. Even the best case is worse than Bubble sort.

References

  1. ^ "CiteSeerX — Pessimal Algorithms and Simplexity Analysis" (Document). {{cite document}}: Cite document requires |publisher= (help); Unknown parameter |citeseerx= ignored (help)