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语法速查表
Jan 02 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
整理的一些实用WordPress后台MySQL操作命令
Jan 07 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php制作动态随机验证码
Feb 12 PHP
php建立Ftp连接的方法
Mar 07 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 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 Socket 编程
2010/04/09 PHP
php中设置多级目录session的问题
2011/08/08 PHP
如何判断php数组的维度
2013/06/10 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
基于JS判断iframe是否加载成功的方法(多种浏览器)
2016/05/13 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
python进程和线程用法知识点总结
2019/05/28 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
关于幸福的感言
2015/08/03 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL