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和MySQL保存和输出图片
Oct 09 PHP
PHP 中的面向对象编程:通向大型 PHP 工程的办法
Dec 03 PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
Gregarius中文日期格式问题解决办法
Apr 22 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
PHP session有效期问题
Apr 26 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
php实现Mongodb自定义方式生成自增ID的方法
Mar 23 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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获取后台Job管理的实现代码
2011/06/10 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP中文编码小技巧
2014/12/25 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
vue中使用GraphQL的实例代码
2019/11/04 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python实现不规则图形填充的思路
2020/02/02 Python
python3注册全局热键的实现
2020/03/22 Python
详解Python 函数参数的拆解
2020/09/02 Python
学生会主席就职演讲稿
2014/01/14 职场文书
农民工创业典型事迹
2014/01/25 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
公司酒会主持词
2015/07/02 职场文书
社会实践心得体会范文
2016/01/14 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB