Reference articles on history, science, culture and more
Encyclopedia

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.

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 r

02Complexity Analysis

The time complexity of Slowsort is given by the function T(n)=2T(n/2)+T(n-1)+1. 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 T(n), which in Landau notation is given as \Omega \left(n^{\log _{2}(n)/(2+\epsilon )}\right) for any \epsilon >0. Therefore Slowsort is not in polynomial time.

Watch videos about SlowsortExplainers and documentaries on YouTube (opens in a new tab)

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.