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 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
PHP之autoload运行机制实例分析
Aug 28 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
php判断文件上传图片格式的实例详解
Sep 30 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
laravel实现按月或天或小时统计mysql数据的方法
Oct 09 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
B2K与车机的中波PK
2021/03/02 无线电
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php常用文件操作函数汇总
2014/11/22 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
itchat接口使用示例
2017/10/23 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
深入学习python多线程与GIL
2019/08/26 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
2014自主招生自荐信策略
2014/01/27 职场文书
个人工作保证书
2015/02/28 职场文书
幼师自荐信范文
2015/03/06 职场文书
新生开学寄语大全
2015/05/28 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
会议主持词通用版
2019/04/02 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android