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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
php实现在服务器上创建目录的方法
Mar 16 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
PHP PDOStatement::bindColumn讲解
Jan 30 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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新手上路(十)
2006/10/09 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
php实现购物车功能(上)
2020/07/23 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
2种简单的js倒计时方式
2017/10/20 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
python绘制简单彩虹图
2018/11/19 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
python 读取修改pcap包的例子
2019/07/23 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
化学教育专业求职信
2014/07/08 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
python字典进行运算原理及实例分享
2021/08/02 Python