php快速排序原理与实现方法分析


Posted in PHP onMay 26, 2016

本文实例讲述了php快速排序方法。分享给大家供大家参考,具体如下:

<?php
$n = array('13','14','55','10','54','2','79','106','89','90','22','60','111','77777','-110','-10','123');
function partition($n,$left,$right)
{
  global $n;
  $pivot = $n[$left];
  $lo=$left;
  $hi=$right+1;
  while($lo+1!=$hi) {
    if($n[$lo+1]<$pivot)
      $lo++;
    else if($n[$hi-1]>$pivot)
      $hi--;
    else{
      $t=$n[$lo+1];
      $n[$lo+1]=$n[$hi-1];
      $n[$hi-1]=$t;
      $lo++;
      $hi--;
    }
  }
  $n[$left]=$n[$lo];
  $n[$lo]=$pivot;
  return $lo;
}
function quicksort($n,$left,$right)
{
  global $n;
  $dp = 0;
  if ($left<$right) {
     $dp=partition($n,$left,$right);
     quicksort($n,$left,$dp-1);
     quicksort($n,$dp+1,$right);
  }
}
quicksort($n,0,sizeof($n)-1);
print_r($n);
?>

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:

1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;
2)、以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;
4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;
5)、重复第3、4步,直到I=J;

快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列

PHP 相关文章推荐
PHP开启gzip页面压缩实例代码
Mar 11 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php的hash算法介绍
Feb 13 PHP
apache和PHP如何整合在一起
Oct 12 PHP
非常实用的php验证码类
May 15 PHP
php图片上传类 附调用方法
May 15 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
PHP文件下载实例代码浅析
Aug 17 PHP
PHP7 新特性详细介绍
Sep 06 PHP
深入理解PHP中的empty和isset函数
May 26 #PHP
CodeIgniter常用知识点小结
May 26 #PHP
php数组函数array_walk用法示例
May 26 #PHP
PHP发送AT指令实例代码
May 26 #PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 #PHP
php连接oracle数据库的核心步骤
May 26 #PHP
php连接oracle数据库的方法(测试成功)
May 26 #PHP
You might like
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP实现微信退款功能
2018/10/02 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
python使用mailbox打印电子邮件的方法
2015/04/30 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
python多线程扫描端口(线程池)
2019/09/04 Python
Python continue语句实例用法
2020/02/06 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
通过Python实现一个简单的html页面
2020/05/16 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
租房协议书怎么写
2014/04/10 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
员工试用期工作总结
2019/06/20 职场文书
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers