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 pdo新改动加载注意事项
Sep 11 PHP
php 小乘法表实现代码
Jul 16 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php获取目标函数执行时间示例
Mar 04 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 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设计模式 注册表模式
2012/02/05 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
php图像生成函数之间的区别分析
2012/12/06 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
学习python (1)
2006/10/31 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
浅谈django中的认证与登录
2016/10/31 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python+selenium实现QQ邮箱自动发送功能
2019/01/23 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python构造IP报文实例
2020/05/05 Python
python实现发送邮件
2021/03/02 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
幼儿教师考核制度
2014/01/25 职场文书
简易版租房协议书范本
2014/10/13 职场文书
思想品德课教学反思
2016/02/24 职场文书
Go语言grpc和protobuf
2022/04/13 Golang