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 mssql 分页SQL语句优化 持续影响
Apr 26 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
php页面缓存方法小结
Jan 10 PHP
PHP文件缓存类示例分享
Jan 30 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP自定义函数收代码
2010/08/01 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
解决layUI的页面显示不全的问题
2019/09/20 Javascript
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
善意的谎言事例
2014/02/15 职场文书
完美的中文自荐信
2014/05/24 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
思品教学工作总结
2015/08/10 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL