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&amp;java(二)
Oct 09 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
PHP可变函数的使用详解
Jun 14 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
php实现的AES加密类定义与用法示例
Jan 29 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
简单的php写入数据库类代码分享
2011/07/26 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
php实现的日历程序
2015/06/18 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
Python中基础的socket编程实战攻略
2016/06/01 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
python科学计算之narray对象用法
2019/11/25 Python
python中return不返回值的问题解析
2020/07/22 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
安全生产检讨书
2014/01/21 职场文书
中学生操行评语大全
2014/04/24 职场文书
工作作风建设心得体会
2014/10/22 职场文书
幼儿教师个人总结
2015/02/05 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
早会开场白台词大全
2015/06/01 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL