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目录导航文件代码
Oct 09 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
Jun 21 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
redis查看连接数及php模拟并发创建redis连接的方法
Dec 15 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
php连接mysql数据库最简单的实现方法
Sep 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
ADODB的数据库封包程序库
2006/12/31 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
PHP实现百度人脸识别
2019/05/06 PHP
javascript this用法小结
2008/12/19 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
详细解读Python中的__init__()方法
2015/05/02 Python
使用python绘制常用的图表
2016/08/27 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Python文件操作基础流程解析
2020/03/19 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
大专计算机个人求职的自我评价
2013/10/21 职场文书
运动会稿件50字
2014/02/17 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
伦敦奥运会口号
2014/06/13 职场文书
施工安全汇报材料
2014/08/17 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫