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
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
PHP集成FCK的函数代码
Sep 27 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
解析php中反射的应用
Jun 18 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php生成html文件方法总结
Dec 01 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
一文搞懂php的垃圾回收机制
Jun 18 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的cURL库简介及使用示例
2015/02/06 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
用jscript实现新建word文档
2007/06/15 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python获取代码运行时间的实例代码
2018/06/11 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
幼儿园门卫岗位职责
2014/02/14 职场文书
内科护士节演讲稿
2014/09/11 职场文书
受伤赔偿协议书
2014/09/24 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书