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的异常处理类Exception的使用及说明
Jun 13 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
php开发微信支付获取用户地址
Oct 04 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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执行速度全攻略(上)
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python多进程读图提取特征存npy
2019/05/21 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
Python发送邮件实现基础解析
2020/08/14 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
JSF界面控制层技术
2013/06/17 面试题
小学体育教学反思
2014/01/31 职场文书
商超业务员岗位职责
2014/03/12 职场文书
春节联欢会策划方案
2014/05/16 职场文书
教师节横幅标语
2014/10/08 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书