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生成Flash动画的实现代码
Mar 12 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
May 04 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php的4种常用运行方式详解
Dec 22 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 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实现短信验证码接口(容联运通讯)
2016/09/06 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
ArrayList类(增强版)
2007/04/04 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
js日历功能对象
2012/01/12 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
python ChainMap的使用和说明详解
2019/06/11 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python中自带的三个装饰器的实现
2019/11/08 Python
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
园林设计专业毕业生求职信
2014/03/23 职场文书
客房服务员岗位职责
2015/02/09 职场文书
应聘教师自荐信
2015/03/26 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
2022年四月新番
2022/03/15 日漫
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技