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 相关文章推荐
PR值查询 | PageRank 查询
Dec 20 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
判断PHP数组是否为空的代码
Sep 08 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
PHP 中常量的知识整理
2017/04/14 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Python循环语句之break与continue的用法
2015/10/14 Python
python生成密码字典的方法
2018/07/06 Python
想学python 这5本书籍你必看!
2018/12/11 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
python 同时读取多个文件的例子
2019/07/16 Python
Python socket 套接字实现通信详解
2019/08/27 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
爱情保证书范文
2014/02/01 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
股权收购意向书
2014/04/01 职场文书
企业人事任命书
2014/06/05 职场文书
设计专业自荐信
2014/06/19 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
MySQL sql_mode的使用详解
2021/05/08 MySQL
python基础之爬虫入门
2021/05/10 Python
Python制作春联的示例代码
2022/01/22 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL