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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
PHP 事务处理数据实现代码
May 13 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
php模板原理讲解
Nov 13 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
PHP函数超时处理方法
Feb 14 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 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调用三种数据库的方法(1)
2006/10/09 PHP
php中计算未知长度的字符串哪个字符出现的次数最多的代码
2012/08/14 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
详解vue路由
2020/08/05 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
python实现求最长回文子串长度
2018/01/22 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
详解Python3中的 input() 函数
2020/03/18 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Python用Jira库来操作Jira
2020/12/28 Python
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
六一节目主持词
2014/04/01 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
Golang jwt身份认证
2022/04/20 Golang