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维护文件系统
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
学习php开源项目的源码指南
Dec 21 PHP
详解js异步文件加载器
Jan 24 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 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
php 时间计算问题小结
2009/01/04 PHP
php实现网站插件机制的方法
2009/11/10 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
实现PHP搜索加分页
2016/10/12 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
Python 中@property的用法详解
2020/01/15 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
超市营业员求职简历的自我评价
2013/10/17 职场文书
社区活动邀请函范文
2014/01/29 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
高二化学教学反思
2016/02/22 职场文书
AJAX学习笔记
2021/05/18 Javascript