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 图片上传实现代码 带详细注释
Apr 29 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
Yii2框架控制器、路由、Url生成操作示例
May 27 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
设定php简写功能的方法
Nov 28 PHP
PHP网页缓存技术优点及代码实例
Jul 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 empty()与isset()区别的详细介绍
2013/06/17 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
javascript新手语法小结
2008/06/15 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
浅析Angular19 自定义表单控件
2018/01/31 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
react实现同页面三级跳转路由布局
2019/09/26 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
python3.0 字典key排序
2008/12/24 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
jupyter notebook oepncv 显示一张图像的实现
2020/04/24 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
管理科学大学生求职信
2013/11/13 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
小学班主任工作随笔
2015/08/15 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
MySQL的安装与配置详细教程
2021/06/26 MySQL
索尼ICF-5900W收音机测评
2022/04/24 无线电