慢速排序是一种排序算法。其基于合并排序的分而治之及递回的思想,并故意设计使排序过程非常缓慢。慢速排序由Andrei Broder及Jorge Stolfi在1986年发表的论文(论文名称是渐进最优算法及计算复杂性理论的戏仿)中提出。
慢速排序是一种原地算法的递回算法。
在简单的虚拟码中,此算法可以被表示为:
procedure slowsort(A, i, j) // 排序一個整數或浮點數數列 A,...,A ,若要使用其他的資料類型則必須重載大於或小於運算符 if i ≥ j then return m := ⌊(i+j) / 2⌋ slowsort(A, i, m) // (1.1) slowsort(A, m+1, j) // (1.2) if A < A then swap A and A // (1.3) slowsort(A, i, j-1) // (2)
- 以慢速排序法排序前半部的元素(1.1)
- 以慢速排序法排序后半部的元素(1.2)
- 比较1.1及1.2排序结果的最后一个元素,选择相对较大的元素放到列表尾端(1.3)
- 排除1.3的元素后,将列表剩下的元素以慢速排序法排序(2)
以 Haskell(纯函式编程语言)的实现如下:
slowsort :: Ord a => -> slowsort xs | length xs <= 1 = xs | otherwise = slowsort xsnew ++ -- (2) where l = slowsort $ take m xs -- (1.1) r = slowsort $ drop m xs -- (1.2) llast = last l rlast = last r xsnew = init l ++ min llast rlast : init r m = fst (divMod (length xs) 2)