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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
PHP写杨辉三角实例代码
Jul 17 PHP
PHP数据过滤的方法
Oct 30 PHP
php按百分比生成缩略图的代码分享
May 10 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
Git命令之分支详解
Mar 02 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/17 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
Python3写入文件常用方法实例分析
2015/05/22 Python
Django自定义manage命令实例代码
2018/02/11 Python
python批量修改图片大小的方法
2018/07/24 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python缓存技术实现过程详解
2019/09/25 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Django实现简单的分页功能
2021/02/22 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
大专生工程监理求职信
2013/10/04 职场文书
资产运营委托书范本
2014/10/16 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript