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 获取当前访问的url文件名的方法小结
Feb 08 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
Jun 28 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 PHP
详解php中流行的rpc框架
May 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
ThinkPHP分页类使用详解
2014/03/05 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
php桥接模式应用案例分析
2019/10/23 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
微信小程序开发探究
2016/12/27 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
vue全局使用axios的操作
2020/09/08 Javascript
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
python实现排序算法解析
2018/09/08 Python
对Python random模块打乱数组顺序的实例讲解
2018/11/08 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
英国探险旅游专家:Explore
2018/12/20 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物