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的优点与缺点
Apr 11 PHP
PHP可变函数的使用详解
Jun 14 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
php模式设计之观察者模式应用实例分析
Sep 25 PHP
PHP number_format函数原理及实例解析
Jul 14 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
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
php输出xml属性的方法
2015/03/19 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
js去除重复字符串两种实现方法
2013/01/09 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
2020/07/18 Javascript
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
计算机应用职专应届生求职信
2013/11/12 职场文书
运动会邀请函范文
2014/01/31 职场文书
公司离职证明标准样本
2014/10/05 职场文书
董事会决议范本
2015/07/01 职场文书
会计主管竞聘书
2015/09/15 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书