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中在数据库中保存Checkbox数据(1)
Oct 09 PHP
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
Jan 10 PHP
ajax+php打造进度条代码[readyState各状态说明]
Apr 12 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
thinkphp的c方法使用示例
Feb 24 PHP
php绘图中显示不出图片的原因及解决
Mar 05 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
PHP封装curl的调用接口及常用函数详解
May 31 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
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
小程序实现多列选择器
2019/02/15 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
Python中的引用和拷贝浅析
2014/11/22 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python操作kafka实践的示例代码
2019/06/19 Python
python打开windows应用程序的实例
2019/06/28 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
python实现飞机大战项目
2020/03/11 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
运动会通讯稿400字
2014/01/28 职场文书
毕业生自荐书
2014/02/03 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
教师节慰问信
2015/02/15 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers