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 相关文章推荐
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
php实现加减法验证码代码
Feb 14 PHP
php实现读取超大文件的方法
Jul 28 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
功能强大的php文件上传类
Aug 29 PHP
Laravel日志用法详解
Oct 09 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 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常用正则表达式的整理汇总
2013/06/08 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
用javascript作一个通用向导说明
2011/08/30 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
简单的js计算器实现
2016/10/26 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
用python写asp详细讲解
2013/12/16 Python
十个Python程序员易犯的错误
2015/12/15 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
在pycharm中实现删除bookmark
2020/02/14 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
成人大专自我鉴定范文
2013/10/19 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
消防战士优秀事迹材料
2014/02/13 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
岗位工作说明书
2014/07/29 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js