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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
PHP无敌近乎加密方式!
Jul 17 PHP
PHP下escape解码函数的实现方法
Aug 08 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
php获取指定日期之间的各个周和月的起止时间
Nov 24 PHP
PHP中new static() 和 new self() 的区别介绍
Jan 09 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
PHP http请求超时问题解决方案
Nov 13 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中url函数介绍及使用示例
2014/02/13 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
javascript 作用于作用域链的详解
2017/09/27 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
python批量修改文件名的实现代码
2014/09/01 Python
python中list循环语句用法实例
2014/11/10 Python
python更新列表的方法
2015/07/28 Python
Python入门教程之运算符与控制流
2016/08/17 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
python argparser的具体使用
2019/11/10 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
HTML5之语义标签介绍
2016/07/07 HTML / CSS
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
李强优秀员工观后感
2015/06/16 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js