[python&erlang] recursive quicksort 递归快排

面对过程编程要了oo人的狗命,我真的不会递归……先用python打个草稿……

py

def quickSort(l):
    if len(l)==0:
        return []
    if len(l)==1:
        return l
    
    L=[]
    R=[]
    for a in l[1:]:
        if a<=l[0]:
            L.append(a)
        else:
            R.append(a)
            
    return quickSort(L)+[l[0]]+quickSort(R)

erl

%quick sort
quickSort([]) ->
[];

quickSort([H|[]]) ->
[H|[]];

quickSort([H|T]) ->
L=[N|| N <- T, N=<H],
R=[N|| N <- T, N>H],
quickSort(L)++[H]++quickSort(R).

不过我pivot图方便写的是最左边哦,如果真要性能好一些拿来用肯定随机访问更好(但是你为什么不用mergesort&你为什么不直接调库)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尾归是一种高效解决问题的思想,它可以避免递归过程中的栈溢出问题。在Erlang中,由于没有循环语句,所以递归是一种常见的编程方式。而尾递归是一种特殊的递归方式,它可以将递归转化为循环,从而避免了递归过程中的栈溢出问题。 在Erlang中,尾递归函数的最后一步操作是递归调用自身,并且递归调用的结果直接返回给函数的调用者,而不是在递归调用之后再进行其他操作。这样,就可以避免递归过程中的栈溢出问题,因为每次递归调用都会覆盖上一次调用的栈帧,从而减少了栈的使用。 举个例子,下面是一个计算阶乘的尾递归函数: ``` facttail(N) -> facttail(N, 1). facttail(0, Acc) -> Acc; facttail(N, Acc) -> facttail(N-1, N*Acc). ``` 在这个函数中,第一个参数N表示要计算阶乘的数,第二个参数Acc表示当前的阶乘结果。函数的第一行调用了一个辅助函数facttail/2,并将Acc初始化为1。在辅助函数中,当N等于0时,直接返回Acc;否则,递归调用facttail/2,并将N减1,Acc乘以N,作为下一次调用的参数。这样,每次递归调用都会更新Acc的值,直到N等于0时,返回最终的阶乘结果。 总之,尾递归是一种高效的递归方式,可以避免递归过程中的栈溢出问题。在Erlang中,尾递归函数的最后一步操作是递归调用自身,并且递归调用的结果直接返回给函数的调用者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值