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 相关文章推荐
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
PHP 根据IP地址控制访问的代码
Apr 22 PHP
PHP异步调用socket实现代码
Jan 12 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
PHP中HTML标签过滤技巧
Jan 07 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
Mar 13 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
thinkphp3.2实现上传图片的控制器方法
Apr 28 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
php反射学习之不用new方法实例化类操作示例
Jun 14 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
微信小程序开发探究
2016/12/27 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
python中的字典操作及字典函数
2018/01/03 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python实现经典排序算法的示例代码
2021/02/07 Python
介绍一下Linux文件的记录形式
2012/04/18 面试题
简历自我评价怎么写好呢?
2014/01/04 职场文书
员工晚婚的请假条
2014/02/08 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
教师群众路线心得体会
2014/11/04 职场文书
飞屋环游记观后感
2015/06/08 职场文书
休学证明范本
2015/06/19 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫