使用haskell实现的快排代码真的是相当简洁,直观,很有美感。相对于C系列语言来说,haskell写算法的时候更关注算法本身是什么样子而不是怎么去实现这个算法,这点真的很棒。
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallPart = quicksort [a | a <- xs, a <= x]
bigPart = quicksort [a | a <- xs, a > x]
in smallPart ++ [x] ++ bigPart
作为对比,下面的是C的实现,在表达能力上,高下立判。
void quick_sort(int *A, int L, int R) {
if (R <= L) return;
int key = A[L], u = L, v = R;
while (L < R) {
while (L < R && A[R] >= key) --R;
A[L] = A[R];
while (L < R && A[L] <= key) ++L;
A[R] = A[L];
}
A[L] = key;
quick_sort(A, u, L - 1);
quick_sort(A, L + 1, v);
}