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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
php单例模式实现方法分析
Mar 14 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
针对PHP开发安全问题的相关总结
Mar 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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
简单谈谈Python中函数的可变参数
2016/09/02 Python
详解django中使用定时任务的方法
2018/09/27 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python 发送json数据操作实例分析
2019/10/15 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
Python如何对XML 解析
2020/06/28 Python
网站域名和主机:Domain.com
2019/04/01 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
党员的自我评价范文
2014/01/02 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
《长征》教学反思
2014/04/27 职场文书
银行转正自我鉴定
2014/09/29 职场文书
学校师德师风整改措施
2014/10/27 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
2015年女工委工作总结
2015/07/27 职场文书