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具体实现代码
Oct 12 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
Jul 18 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
php批量删除超链接的实现方法
Oct 19 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
php use和include区别总结
Oct 13 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 PHP
php字符串倒叙
Apr 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
一个PHP的String类代码
2010/04/20 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
详解Python开发中如何使用Hook技巧
2017/11/01 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python实现猜数游戏
2020/03/27 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python属于解释型语言么
2020/06/15 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
PHP面试题大全
2015/10/16 面试题
军校大学生个人的自我评价
2014/02/17 职场文书
社会实践活动总结范文
2014/07/03 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
python函数的两种嵌套方法使用
2022/04/02 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技
VUE递归树形实现多级列表
2022/07/15 Vue.js