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制作静态网站的模板框架(三)
Oct 09 PHP
怎样在UNIX系统下安装php3
Oct 09 PHP
PHP+javascript液晶时钟
Oct 09 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
Laravel学习教程之路由模块
Aug 18 PHP
php中通用的excel导出方法实例
Dec 30 PHP
php+iframe 实现上传文件功能示例
Mar 04 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
PHP4之COOKIE支持详解
2006/10/09 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
2018/10/12 PHP
PHP getName()函数讲解
2019/02/03 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
深入理解JavaScript系列(15) 函数(Functions)
2012/04/12 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
2016/11/18 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
JS实现身份证输入框的输入效果
2017/08/21 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
Python变量赋值的秘密分享
2018/04/03 Python
浅析PEP572: 海象运算符
2019/10/15 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
2015/05/08 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
物流管理专业毕业生自荐信
2014/03/04 职场文书
网络营销策划方案
2014/06/04 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
个人剖析材料范文
2014/09/30 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
话题作文之自信作文
2019/11/15 职场文书