PHP两种快速排序算法实例


Posted in PHP onFebruary 15, 2015

虽然在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 相关文章推荐
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
浅析php如何实现App常用的秒发功能
Aug 03 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
PHP批量查询WordPress留言者E-mail地址实现方法
Feb 15 #PHP
CentOS下PHP安装Oracle扩展
Feb 15 #PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
Feb 14 #PHP
php魔术函数__call()用法实例分析
Feb 13 #PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 #PHP
PHP网站开发中常用的8个小技巧
Feb 13 #PHP
用php守护另一个php进程的例子
Feb 13 #PHP
You might like
使用Sphinx对索引进行搜索
2013/06/25 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
理解javascript中的回调函数(callback)
2014/09/02 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python随机生成信用卡卡号的实现方法
2015/05/14 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Python如何实现线程间通信
2020/07/30 Python
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
商务主管岗位职责
2013/12/08 职场文书
索桥的故事教学反思
2014/02/06 职场文书
市场开发计划书
2014/05/07 职场文书
开学典礼策划方案
2014/05/28 职场文书
会计毕业生自荐书
2014/06/12 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
小学班主任经验交流材料
2014/12/16 职场文书