+ -
当前位置:首页 → 问答吧 → 函数编程思想写快速排序

函数编程思想写快速排序

时间:2010-07-29

来源:互联网



从Haskell的快速排序例子借鉴过来的,发现用PHP 5.3也可以比较优美地写出来。
注意,没有循环语句……

  1. function qsort($list) {
  2.     // 空表排序后的结果仍然是空表
  3.     if(empty($list)) {
  4.         return $list;
  5.     }
  6.    
  7.     // 取出第一个元素
  8.     $x = array_shift($list);
  9.    
  10.     // 在剩下部分找到所有小于等于 $x 的元素
  11.     $less = array_filter($list, function($n) use($x) {
  12.         return $n <= $x;
  13.     });
  14.    
  15.     // 找到所有大于 $x 的元素
  16.     $larger = array_filter($list, function($n) use($x) {
  17.         return $n > $x;
  18.     });
  19.    
  20.     // 对两部分分别应用快速排序,并将 $x 放到正确的位置上
  21.     return array_merge(qsort($less), array($x), qsort($larger));
  22. }

  23. // 测试……
  24. $list = array(3,1,9,18,3,1,10,13,9,8,7);
  25. $list_sorted = qsort($list);
  26. print_r($list_sorted);
复制代码

作者: ggggqqqqihc   发布时间: 2010-07-29

没有循环语句....

作者: TankMe   发布时间: 2010-07-29

是一种方法,但递归不见得比循环快速

作者: houlai   发布时间: 2010-07-29


是一种方法,但递归不见得比循环快速
houlai 发表于 2010-7-29 09:55



    最好别扯到效率上,当然对于快速排序,你可以试试不使用递归有多么难写和多么容易出错。

作者: ggggqqqqihc   发布时间: 2010-07-29

回复 ggggqqqqihc


    呵呵,我也说了,确实是一种思路

作者: houlai   发布时间: 2010-07-29

回复 houlai


    你的签名有意思哇

作者: ggggqqqqihc   发布时间: 2010-07-29

回复 ggggqqqqihc


    呵呵,

作者: houlai   发布时间: 2010-07-29