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中如何在有限的内存中读取大文件
Jul 02 PHP
学习php分页代码实例
Oct 24 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 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
菜鸟修复电子管记
2021/03/02 无线电
模拟flock实现文件锁定
2007/02/14 PHP
精通php的十大要点(上)
2009/02/04 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
2017/03/03 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
Python yield与实现方法代码分析
2018/02/06 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
集团薪酬管理制度
2014/01/13 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
大国崛起观后感
2015/06/02 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
如何解决php-fpm启动不了问题
2021/11/17 PHP
Pandas数据结构之Series的使用
2022/03/31 Python