SlowsortSlowsort is a sorting algorithm. It is of humorous nature and not useful. 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"[1] (a parody of optimal algorithms and complexity analysis). AlgorithmSlowsort 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)
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
Complexity AnalysisThe 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 in Landau notation is given as for any . Therefore Slowsort is not in polynomial time. References
|