Ruby 一个另类简洁 (优雅吗?) 的快速排序实现

arth · 2015年10月09日 · 最后由 arth 回复于 2015年10月10日 · 1895 次阅读
def qsort(arr)
  return arr if arr.size<2
  small=arr.reject{|i| i>=arr[0]}
  large=arr.reject{|i| i<=arr[0]}
  qsort(small) + arr.reject{|i| i!=arr[0]} + qsort(large)
end

这里用了 3 趟遍历实现 partition,仅仅是为了读起来容易。 但完全可以用一趟实现 partition,但感觉代码略丑。

有没有更好的实现?

Enumerable#group_by & <=>

def qsort(a)
  return [] if not a or a.size<1
  nxt=a.group_by{|i| i<=>a[0]}
  qsort(nxt[-1])+nxt[0]+qsort(nxt[1])
end

@msg7086 这样确实更好,但感觉我的写法还不是最好的。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号