当前位置: 首页 > news >正文

php mysql 排名算法_PHP实现四种基础排序算法的运行时间比较(推荐)

许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级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实现四种基础排序算法的运行时间比较,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章:

  • python 输出字典字符_从服务器到字典的python输出字符串
  • 用el表达式取出mysql中的值_用c标签,el表达式动态取数据库中的值并显示在页面上,动态下拉列表的实现,html:select...
  • 抓狐狸python_Python运算符
  • mysql数据库set names_MySQL数据库之mysql SET NAMES
  • python xls 合并为 cvs_使用python把csv汇总成excel
  • python 可迭代对象和迭代器区别_python生成器,可迭代对象,迭代器区别和联系...
  • java打印文件_java 循环打印文件夹文件
  • java sql系统_用Java实现数据库应用系统
  • jmeter的java请求参数设置_jmeter之 java请求
  • java如何设置系统属性_java – 设置系统属性
  • java ajax增删改查_使用AJAX实现数据的增删改查
  • java去掉结尾的空格_如何从Java中显示的字符串末尾删除空格?
  • java最大回文字符串长度_Leet Code 5 最长回文子串 - Java
  • java泡沫_Java初认识--函数和数组
  • java虚拟机内存溢出的三个原因_JVM发生内存溢出的原因分析及解决方案
  • java多线程
  • k8s如何管理Pod
  • Linux下的乱码问题
  • mongo索引构建
  • node-glob通配符
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue 配置sass、scss全局变量
  • vue数据传递--我有特殊的实现技巧
  • 工程优化暨babel升级小记
  • 关于extract.autodesk.io的一些说明
  • 缓存与缓冲
  • 设计模式走一遍---观察者模式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #include
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (4.10~4.16)
  • (C语言)字符分类函数
  • (Ruby)Ubuntu12.04安装Rails环境
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)为C# Windows服务添加安装程序
  • **python多态
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core 项目指定SDK版本
  • .net FrameWork简介,数组,枚举
  • .net 调用php,php 调用.net com组件 --
  • .net项目IIS、VS 附加进程调试
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [17]JAVAEE-HTTP协议
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Assignment] C++1
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [C++基础]-入门知识
  • [C语言]编译和链接
  • [dfs] 图案计数
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [Electron]ipcMain.on和ipcMain.handle的区别