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 相关文章推荐
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
解析php php_openssl.dll的作用
Jul 01 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
php实现源代码加密的方法
Jul 11 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
PHP函数积累总结
Mar 19 PHP
PHP实现文件上传后台处理脚本
Mar 04 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匹配UTF-8中文的正则表达式
2015/05/13 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
python实现ping的方法
2015/07/06 Python
python3.4爬虫demo
2019/01/22 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
params有什么用
2016/03/01 面试题
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
高二学生评语大全
2014/04/25 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
群众路线对照检查材料
2014/09/22 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android