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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
ADODB类使用
Nov 25 PHP
PHP分页显示制作详细讲解
Dec 05 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
php实现将Session写入数据库
Jul 26 PHP
php防止用户重复提交表单
Nov 02 PHP
PHP缓冲区用法总结
Feb 14 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP session垃圾回收机制实例分析
Jun 28 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 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
西德产收音机
2021/03/01 无线电
PHP生成带有雪花背景的验证码
2006/10/09 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
angular2使用简单介绍
2016/03/01 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
AngularJS中$http的交互问题
2017/03/29 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
jQuery Position方法使用和兼容性
2017/08/23 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
Python多线程编程简单介绍
2015/04/13 Python
Python中的XML库4Suite Server的介绍
2015/04/14 Python
python树莓派红外反射传感器
2019/01/21 Python
详解python datetime模块
2020/08/17 Python
Europcar比利时:租车
2019/08/26 全球购物
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
学生打架检讨书1000字
2014/01/16 职场文书
实践单位评语
2014/04/26 职场文书
汉字听写大会观后感
2015/06/12 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
Python如何使用循环结构和分支结构
2022/04/13 Python