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 相关文章推荐
Oracle 常见问题解答
Oct 09 PHP
PHP 身份证号验证函数
May 07 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
php文件操作实例代码
May 10 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
PHP7新特性
Mar 09 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
PHP写MySQL数据 实现代码
2009/06/15 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
jQuery实现评论模块
2020/08/19 jQuery
python 图片验证码代码
2008/12/07 Python
解决python删除文件的权限错误问题
2018/04/24 Python
Python使用OpenCV进行标定
2018/05/08 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
伊索寓言教学反思
2014/05/01 职场文书
敬老月活动总结
2014/08/28 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
红色电影观后感
2015/06/18 职场文书