Haskell实现快排

Haskell与C的快速排序之美

使用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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值