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 相关文章推荐
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
php str_pad 函数使用详解
Jan 13 PHP
php 引用(&amp;)详解
Nov 20 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
一个基于PDO的数据库操作类
Mar 24 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
PHP文件读取功能的应用实例
May 08 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
Laravel框架下的Contracts契约详解
Mar 17 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读取XML值的代码(推荐)
2011/01/01 PHP
php实现倒计时效果
2015/12/19 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
2017/01/21 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python之django母板页面的使用
2018/07/03 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
体育学院毕业生自荐信
2013/11/03 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
初三学习决心书
2014/03/11 职场文书
新年爱情寄语
2014/04/08 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
详解Python 3.10 中的新功能和变化
2021/04/28 Python