Slowsort
Humorous sorting algorithm
Slowsort is a sorting algorithm. It is of humorous nature and not useful for practical applications. It is a reluctant algorithm based on the principle of multiply and surrender (a parody formed by taking the opposites of divide and conquer). It was published in 1984 by Andrei Broder and Jorge Stolfi in their paper "Pessimal Algorithms and Simplexity Analysis" (a parody of optimal algorithms and complexity analysis).
01Algorithm
Slowsort is a recursive algorithm.
- It sorts in-place.
- It is an unstable sort. (It might change the order of equal-valued keys.)
A pseudocode implementation is given below:
procedure slowsort(A[], start_idx, end_idx) // Sort array range A[start ... end] in-place. if start_idx ≥ end_idx then return middle_idx := floor( (start_idx + end_idx)/2 ) slowsort(A, start_idx, middle_idx) // (1.1) slowsort(A, middle_idx + 1, end_idx) // (1.2) if A[end_idx] < A[middle_idx] then swap (A, end_idx, middle_idx) // (1.3) slowsort(A, start_idx, end_idx - 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)
- Sort the entire list (except for the maximum now at the end), recursively. (2)
An unoptimized 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 r02Complexity Analysis
The time complexity of Slowsort is given by the function . It can be found by creating a recurrence relation of the initial recursive calls (1.1) and (1.2) respectively and summing the final recursive call (2) and modelling the other operations as a constant (+1) in this case. This gives a lower asymptotic bound for
, which in Landau notation is given as
for any
. Therefore Slowsort is not in polynomial time.
Sources and credits
This article is adapted from the Wikipedia article “Slowsort”, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.
Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.