Stooge sort: Difference between revisions

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
imported>PlaceReporter99
mNo edit summary
 
imported>David Eppstein
Undo unexplained churn of implementation to a paywalled and more-cumbersome language
 
Line 34: Line 34:
     return L
     return L
  }
  }
</syntaxhighlight>
=== Haskell ===
<syntaxhighlight lang="haskell">
-- 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
</syntaxhighlight>
</syntaxhighlight>


Line 79: Line 45:
==External links==
==External links==
*[http://cg.scs.carleton.ca/~morin/misc/sortalg/ Sorting Algorithms (including Stooge sort)]
*[http://cg.scs.carleton.ca/~morin/misc/sortalg/ Sorting Algorithms (including Stooge sort)]
*[http://impomatic.blogspot.com/2008/01/stooge-sort.html Stooge sort – implementation and comparison]
*[https://impomatic.blogspot.com/2008/01/stooge-sort.html Stooge sort – implementation and comparison]


{{sorting}}
{{sorting}}

Latest revision as of 00:33, 15 December 2025

Template:Short description Template:Use dmy dates Template:Infobox Algorithm Stooge sort is a recursive sorting algorithm. It is notable for its exceptionally poor time complexity of O(nlog3/log1.5) = O(n2.7095...) The algorithm's running time is thus slower compared to reasonable sorting algorithms, and is slower than bubble sort, a canonical example of a fairly inefficient sort. It is, however, more efficient than Slowsort. The name comes from The Three Stooges.[1]

The algorithm is defined as follows:

  • If the value at the start is larger than the value at the end, swap them.
  • If there are three or more elements in the list, then:
    • Stooge sort the initial 2/3 of the list
    • Stooge sort the final 2/3 of the list
    • Stooge sort the initial 2/3 of the list again

It is important to get the integer sort size used in the recursive calls by rounding the 2/3 upwards, e.g. rounding 2/3 of 5 should give 4 rather than 3, as otherwise the sort can fail on certain data.

Implementation

Pseudocode

 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
 }

References

  1. Script error: No such module "citation/CS1".

Sources

  • Script error: No such module "citation/CS1".
  • Script error: No such module "citation/CS1".

External links

Script error: No such module "Navbox".

Template:Asbox