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和ACCESS写聊天室(七)
Oct 09 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
PHP的基本常识小结
Jul 05 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
PHP中使用BigMap实例
Mar 30 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
PHP高并发和大流量解决方案整理
Mar 09 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
element实现合并单元格通用方法
2019/11/13 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python求pi的方法
2014/10/08 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python程序文件扩展名知识点详解
2020/02/27 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
自学考试自我鉴定范文
2013/09/26 职场文书
团队精神演讲稿
2013/12/31 职场文书
自我评价如何写好?
2014/01/05 职场文书
党校学习自我鉴定
2014/02/24 职场文书
教师评语大全
2014/04/28 职场文书
2015年超市工作总结
2015/04/09 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
Python Matplotlib绘制条形图的全过程
2021/10/24 Python