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 23 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
教你php如何实现验证码
Jan 20 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 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+DBM的同学录程序(1)
2006/10/09 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
使用prototype.js进行异步操作
2007/02/07 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
2017/09/06 NodeJs
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
Python 开发Activex组件方法
2009/11/08 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python输出带颜色字体实例方法
2019/09/01 Python
python requests证书问题解决
2019/09/05 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
python3.7调试的实例方法
2020/07/21 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
python脚本定时发送邮件
2020/12/22 Python
荷兰电脑专场:Paradigit
2018/05/05 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
高一数学教学反思
2014/02/07 职场文书
小学语文教研活动总结
2014/07/01 职场文书
妇女工作先进事迹
2014/08/17 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
python中的sys模块和os模块
2022/03/20 Python