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 相关文章推荐
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
php中日期加减法运算实现代码
Dec 08 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
php简单统计中文个数的方法
Sep 30 PHP
php 输出json及显示json中的中文汉字详解及实例
Nov 09 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
laravel返回统一格式错误码问题
Nov 04 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
文章推荐系统(二)
2006/10/09 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
Python生成器generator原理及用法解析
2020/07/20 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
专科应届生求职信
2013/11/24 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
建国大业观后感800字
2015/06/01 职场文书
靠谱准确的求职信
2019/04/02 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python