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 for 循环语句使用方法详细说明
May 09 PHP
xml在joomla表单中的应用详解分享
Jul 19 PHP
Zend的Registry机制的使用说明
May 02 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
Sep 20 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
Mar 04 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
Laravel实现短信注册的示例代码
May 29 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
关于php开启错误提示的总结
Sep 24 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
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
python hashlib加密实现代码
2019/10/17 Python
Python 实现try重新执行
2019/12/21 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Python修改列表值问题解决方案
2020/03/06 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
德国家具在线:Fashion For Home
2017/03/11 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
个人实习生的自我评价
2014/02/16 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
妈妈活动方案
2014/08/15 职场文书
2015年国庆节寄语
2015/08/17 职场文书
党员反邪教心得体会
2016/01/15 职场文书