加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP 快速排序算法详解

发布时间:2020-12-13 02:08:53 所属栏目:PHP教程 来源:网络整理
导读:《PHP实战:PHP 快速排序算法详解》要点: 本文介绍了PHP实战:PHP 快速排序算法详解,希望对您有用。如果有疑问,可以联系我们。 PHP学习 观点 这里借用百度百科的一张图来,异常形象: PHP进修 快速排序算法是对冒泡算法的一个优化.他的思想是先对数组进行

《PHP实战:PHP 快速排序算法详解》要点:
本文介绍了PHP实战:PHP 快速排序算法详解,希望对您有用。如果有疑问,可以联系我们。

PHP学习观点

这里借用百度百科的一张图来,异常形象:

PHP进修

快速排序算法是对冒泡算法的一个优化.他的思想是先对数组进行分割,把年夜的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和年夜的数组元素合并起来.这里用到了递归的思想.

PHP进修PHP实现

代码如下:

/*
??? 快速排序
*/

function quickSort($array)
{
??? if(!isset($array[1]))
??????? return $array;
??? $mid = $array[0]; //获取一个用于朋分的关键字,一般是首个元素
??? $leftArray = array();
??? $rightArray = array();

??? foreach($array as $v)
??? {
??????? if($v > $mid)
??????????? $rightArray[] = $v;? //把比$mid年夜的数放到一个数组里
??????? if($v < $mid)
??????????? $leftArray[] = $v;?? //把比$mid小的数放到另一个数组里
??? }

??? $leftArray = quickSort($leftArray); //把比拟小的数组再一次进行分割
??? $leftArray[] = $mid;??????? //把分割的元素加到小的数组后面,不能忘了它哦

??? $rightArray = quickSort($rightArray);? //把比拟大的数组再一次进行分割
??? return array_merge($leftArray,$rightArray);? //组合两个结果
}

与冒泡算法对照

这里我与之前写的冒泡算法实现的排序做了个对照,可以看出这个算法比冒泡算法的效率要高很多.

代码如下:

$a = array_rand(range(1,3000),1500);? //甚至在冒泡算法超过1600个元素的时候会出现内存不敷的提示,但这里为了测出两个之间的差别大小,就设置成了1500,保证冒泡算法也能执行完毕.
shuffle($a);? //获取已经打乱了顺序的数组
$t1 = microtime(true);
quickSort($a);? //快速排序
$t2 = microtime(true);
echo (($t2-$t1)*1000).'ms<br/>';

require('./maopao.php');? //这里引用的是我之前写的冒泡算法排序
$t1 = microtime(true);
maoPao($a);?? //冒泡
$t2 = microtime(true);
echo (($t2-$t1)*1000).'ms';

运行成果:

代码以下:

12.10880279541ms
772.64094352722ms

《PHP实战:PHP 快速排序算法详解》是否对您有启发,欢迎查看更多与《PHP实战:PHP 快速排序算法详解》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读