PHP实现四种基础排序算法的运行时间比较(推荐)


Posted in PHP onAugust 11, 2016

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。下面通过本文给大家介绍PHP实现四种基础排序算法的运行时间比较,一起看下吧。

 废话不多说了,直接给大家贴代码了。

具体代码如下所示:

/**
* php四种基础排序算法的运行时间比较
* @authors Jesse (jesse152@163.com)
* @date 2016-08-11 07:12:14
*/
//冒泡排序法
function bubbleSort($array){
$temp = 0;
for($i = 0;$i < count($array) -1;$i++){
for($j = 0;$j < count($array) - 1 -$i;$j++){
if($array[$j] > $array[$j+1]){ //从小到大排列
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
}
//选择排序法
function selectSort($array){
$temp = 0;
for($i = 0;$i < count($array) - 1;$i++){
$minVal = $array[$i]; //假设$i就是最小值
$minValIndex = $i;
for($j = $i+1;$j < count($array);$j++){ 
if($minVal > $array[$j]){ //从小到大排列
$minVal = $array[$j]; //找最小值
$minValIndex = $j;
}
}
$temp = $array[$i];
$array[$i] = $array[$minValIndex];
$array[$minValIndex] = $temp;
}
}
//插入排序法
function insertSort($array){ //从小到大排列
//先默认$array[0],已经有序,是有序表 
for($i = 1;$i < count($array);$i++){
$insertVal = $array[$i]; //$insertVal是准备插入的数
$insertIndex = $i - 1; //有序表中准备比较的数的下标
while($insertIndex >= 0 && $insertVal < $array[$insertIndex]){
$array[$insertIndex + 1] = $array[$insertIndex]; //将数组往后挪
$insertIndex--; //将下标往前挪,准备与前一个进行比较
}
if($insertIndex + 1 !== $i){
$array[$insertIndex + 1] = $insertVal; 
}
}
}
//快速排序法
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), 1600); //生成1600个元素的随机数组
shuffle($a); //打乱数组的顺序
$t1 = microtime(true);
bubbleSort($a); //冒泡排序
$t2 = microtime(true);
echo "冒泡排序用时:".(($t2-$t1)*1000).'ms'."\n";
$t3 = microtime(true);
selectSort($a); //选择排序
$t4 = microtime(true);
echo "选择排序用时:".(($t4-$t3)*1000).'ms'."\n";
$t5 = microtime(true);
insertSort($a); //插入排序
$t6 = microtime(true);
echo "插入排序用时:".(($t6-$t5)*1000).'ms'."\n";
$t7 = microtime(true);
quickSort($a); //快速排序
$t8 = microtime(true);
echo "快速排序用时:".(($t8-$t7)*1000).'ms';

以上所述是小编给大家介绍的PHP实现四种基础排序算法的运行时间比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
在字符串中把网址改成超级链接
Oct 09 PHP
PHP 实用代码收集
Jan 22 PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
PHP实现的购物车类实例
Jun 17 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 PHP
示例详解Laravel重置密码代码重构
Aug 10 #PHP
修改Laravel5.3中的路由文件与路径
Aug 10 #PHP
Yii2中关联查询简单用法示例
Aug 10 #PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 #PHP
Yii2实现同时搜索多个字段的方法
Aug 10 #PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 #PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 #PHP
You might like
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
2014/03/26 HTML / CSS
建筑投标担保书
2014/05/20 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
小学生运动会广播
2015/08/19 职场文书
组织委员竞选稿
2015/11/21 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
python如何读取和存储dict()与.json格式文件
2022/06/25 Python