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学习 函数 课件
Jun 15 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
PHP 身份证号验证函数
May 07 PHP
url decode problem 解决方法
Dec 26 PHP
解析PHP提交后跳转
Jun 23 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
php单链表实现代码分享
Jul 04 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 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随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
uni app仿微信顶部导航条功能
2019/09/17 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
了解一下python内建模块collections
2020/09/07 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
关于VPN
2012/06/10 面试题
学校门卫工作职责
2013/12/07 职场文书
小学家长会邀请函
2014/01/23 职场文书
银行服务感言
2014/03/01 职场文书
就业协议书范本
2014/04/11 职场文书
实习协议书范本
2014/09/25 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书