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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
PHP伪静态写法附代码
Jun 20 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
利用谷歌 Translate API制作自己的翻译脚本
Jun 04 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
php实现二进制和文本相互转换的方法
Apr 18 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
WordPress网站性能优化指南
Nov 18 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
谈谈PHP语法(2)
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
PHP操作MongoDB GridFS 存储文件的详解
2013/06/20 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
是 WordPress 让 PHP 更流行了 而不是框架
2016/02/03 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
python之生产者消费者模型实现详解
2019/07/27 Python
Python读取csv文件实例解析
2019/12/30 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
中队活动总结
2014/08/27 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
财产分割协议书
2016/03/22 职场文书
Python编写nmap扫描工具
2021/07/21 Python
springboot读取nacos配置文件
2022/05/20 Java/Android