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 相关文章推荐
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
PHP 在线翻译函数代码
May 07 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
php实现天干地支计算器示例
Mar 14 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
Yii2 assets清除缓存的方法
May 16 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP编程网上资源导航
2006/10/09 PHP
mysql 字段类型说明
2007/04/27 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
js实现日期级联效果
2014/01/23 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
js禁止表单重复提交
2017/08/29 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
利用Python如何生成随机密码
2016/04/20 Python
Python管理Windows服务小脚本
2018/03/12 Python
使用python绘制二维图形示例
2019/11/22 Python
Python短信轰炸的代码
2020/03/25 Python
Flask处理Web表单的实现方法
2021/01/31 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
教学实验楼管理制度
2014/02/01 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
运动会方阵口号
2014/06/07 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
青年教师个人总结
2015/02/11 职场文书
医德医风自我评价2015
2015/03/03 职场文书
Python中22个万用公式的小结
2021/07/21 Python
Python的property属性详细讲解
2022/04/11 Python