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 数组二分法查找函数代码
Feb 16 PHP
php的大小写敏感问题整理
Dec 29 PHP
php获取一个变量的名字的方法
Sep 05 PHP
学习php开源项目的源码指南
Dec 21 PHP
php结合正则获取字符串中数字
Jun 19 PHP
php生成验证码函数
Oct 20 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
Laravel中如何增加自定义全局函数详解
May 09 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
2016/05/14 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
Python sys.path详细介绍
2013/10/17 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
TensorFlow实现模型评估
2018/09/07 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python读取实时数据流示例
2019/12/02 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
python解包概念及实例
2021/02/17 Python
金讯Java笔试题目
2013/06/18 面试题
操行评语大全
2014/04/30 职场文书
支行行长竞聘报告
2014/11/06 职场文书
优秀班组事迹材料
2014/12/24 职场文书
幼儿教师辞职信
2015/02/27 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python源码解析之List
2021/05/21 Python
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
详解Python中的for循环
2022/04/30 Python