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连mysql和oracle数据库性能比较
Oct 09 PHP
PHP+MySQL5.0中文乱码解决方法
Nov 20 PHP
[原创]效率较高的php下读取文本文件的代码
Jul 02 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
两千行代码的PHP学习笔记汇总
Oct 05 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 PHP
laravel框架使用极光推送消息操作示例
Feb 15 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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
将二维数组转为一维数组的2种方法
2014/05/26 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
python实现百度关键词排名查询
2014/03/30 Python
Python中处理时间的几种方法小结
2015/04/09 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python 星号(*)的多种用途
2020/09/21 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
小学生元旦广播稿
2014/02/21 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
创建文明城市倡议书
2015/04/28 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技