PHP快速排序quicksort实例详解


Posted in PHP onSeptember 28, 2016

本文实例讲述了PHP快速排序quicksort。分享给大家供大家参考,具体如下:

quicksort

在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。(即一分为二的思想)

步骤如下:

在序列中选择一个关键元素做为轴;

对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;

递归地对两个子序列进行重新排序:含有较小元素的子序列和含有较大元素的子序列。

比如序列$arr:

5 3 0 11 44 7 23 2 将第一个元素$arr[0] = 5 作为轴 设置标志位 low … top代表首尾
2 3 0 11 44 7 23 2 从相反方向(右)开始比较:2<5 将第一个位置替换为2,low++
2 3 0 11 44 7 23 11 从相反方向(左)开始比较直到:5<11 将最后一个位置替换为11,top?
重复以上步骤直到 low == top 把该位置替换为轴元素即5
2 3 0 5 44 7 23 11
这样就可分为两部分2 3 0 与 44 23 11
这样就可以得出递归继续开始步骤

算法实现:

class quick_sort{
    function quicksort(&$arr,$low,$top){
      if($low < $top){
        $pivotpos = $this->partition($arr,$low,$top);
        $this->quicksort($arr,$low,$pivotpos-1);
        $this->quicksort($arr,$pivotpos+1,$top);
      }
    }
    function partition(&$arr, $low ,$top){
      if($low == $top){
        return;
      }
  //   设置初始数值
      $com = $arr[$low];
      while($low!=$top){
  //      将比初始数值小的替换到左边
        while($top&&$top!=$low){
          if($com > $arr[$top]){
          $arr[$low++] = $arr[$top];
          break;
          }else{
            $top--;
          }
        }
  //      将比初始数值大的替换到右边
        while($low&&$low!=$top){
          if($com < $arr[$low]){
            $arr[$top--] = $arr[$low];
            break;
          }else{
            $low++;
          }
        }
      }
      $arr[$low] = $com;
      return $low;
    }
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php addslashes和mysql_real_escape_string
Jan 24 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
PHP输出时间差函数代码
Jan 28 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP PDOStatement::bindColumn讲解
Jan 30 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
设定php简写功能的方法
Nov 28 PHP
PHP实现QQ快速登录的方法
Sep 28 #PHP
PHP自定义错误用法示例
Sep 28 #PHP
PHP构造函数与析构函数用法示例
Sep 28 #PHP
PHP设计模式之工厂模式与单例模式
Sep 28 #PHP
PHP类相关知识点实例总结
Sep 28 #PHP
PHP 闭包详解及实例代码
Sep 28 #PHP
php类的自动加载操作实例详解
Sep 28 #PHP
You might like
PHP 一个随机字符串生成代码
2010/05/26 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php多重接口的实现方法
2015/06/20 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
JS 自定义带默认值的函数
2011/07/21 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
理解AngularJs指令
2015/12/10 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python opencv实现图像边缘检测
2019/04/29 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
详解python变量与数据类型
2020/08/25 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
AJax面试题
2014/11/25 面试题
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python