PHP两种快速排序算法实例

5年以前  |  阅读数:1068 次  |  编程语言:PHP 

虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略。所以在此介绍递归排序和迭代排序。

递归法


    /**
    * 递归法实现的快速排序
    */
    function quicksort($seq)
    {
        $k = $seq[0];
        $x = array();
        $y = array();
        for($i=1; $i< $_size; $i++) {
          if($seq[$i] <= $k) {
            $x[] = $seq[$i];
          } else {
            $y[] = $seq[$i];
          }
        }
        $x = quicksort($x);
        $y = quicksort($y);
        return array_merge($x, array($k), $y);
      } else {
        return $seq;
      }
    }

迭代法:


    /**
    * 迭代法的快速排序
    */
    function quicksortx(&$seq)
    {
      $stack = array($seq);
      $sort = array();
      while ($stack) {
        $arr = array_pop($stack);
        if(count($arr) <= 1) {
          if(count($arr) == 1) {
            $sort[] = &$arr[0];
          }
          continue;
        }
        $k = $arr[0];
        $x = array();
        $y = array();
        $_size = count($arr);
        for($i =1 ;$i < $_size; $i++) {
          if($arr[$i] <= $k) {
            $x[] = &$arr[$i];
          } else {
            $y[] = &$arr[$i];
          }
        }
        !empty($y) && array_push($stack, $y);
        array_push($stack, array($arr[0]));
        !empty($x) && array_push($stack, $x);
      }
      return $sort;
    }

使用:


    /**
    *产生一个随机数组
    */
    for($i=0;$i<5;$i++){
      $testArr[]=mt_rand(0,100);
    }
    var_dump($testArr);
    var_dump(quicksort($testArr));

    var_dump(quicksortx($testArr));
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例