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 相关文章推荐
Email+URL的判断和自动转换函数
Oct 09 PHP
php 生成随机验证码图片代码
Feb 08 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
PHP运行模式的深入理解
Jun 03 PHP
php判断是否为json格式的方法
Mar 04 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 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
星际流派综述
2020/03/04 星际争霸
ThinkPHP 404页面的设置方法
2015/01/14 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
通过实例了解python property属性
2019/11/01 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
酒店管理毕业生自我鉴定
2014/03/02 职场文书
2014年超市工作总结
2014/11/19 职场文书
工程质检员岗位职责
2015/04/08 职场文书
公司市场部岗位职责
2015/04/15 职场文书
小学运动会开幕词
2016/03/04 职场文书
入党申请书格式
2019/06/20 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
如何Python使用re模块实现okenizer
2022/04/30 Python
HttpClient实现表单提交上传文件
2022/08/14 Java/Android