PHP实现经典算法上 php程序设计经典300例 php递归算法经典实例 php经典面试
前言
下面的是通过PHP实现经典算法,并计算了耗时,可以通过耗时对比这几种算法的复杂度。
- 插入排序
- 冒泡排序
- 选择排序
- 并归排序
- 快速排序
CODE
<code><span>$arr</span> = []; <span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> 5000; <span>$i</span>++) { <span>$arr</span>[] = rand(<span>1</span>, <span>10000</span>); } <span>//1 插入排序</span><span><span>function</span><span>insertionSort</span><span>(<span>$arr</span>)</span> {</span><span>for</span> (<span>$i</span> = <span>1</span>; <span>$i</span> $arr); <span>$i</span>++) { <span>$tmp</span> = <span>$arr</span>[<span>$i</span>]; <span>//设置监视哨</span><span>$key</span> = <span>$i</span> - <span>1</span>; <span>//设置开始查找的位置</span><span>while</span> (<span>$key</span> >= <span>0</span> && <span>$tmp</span> $arr[<span>$key</span>]) { <span>// 监视哨的值比查找的值小 并且 没有到此次查询的第一个</span><span>$arr</span>[<span>$key</span> + <span>1</span>] = <span>$arr</span>[<span>$key</span>]; <span>//数组的值进行后移</span><span>$key</span>--; <span>//要查找的位置后移</span> } <span>if</span> ((<span>$key</span> + <span>1</span>) != <span>$i</span>) <span>//放置监视哨</span><span>$arr</span>[<span>$key</span> + <span>1</span>] = <span>$tmp</span>; } <span>return</span><span>$arr</span>; } <span>$insertion_start_time</span> = microtime(<span>true</span>); <span>$insertion_sort</span> = insertionSort(<span>$arr</span>); <span>$insertion_end_time</span> = microtime(<span>true</span>); <span>$insertion_need_time</span> = <span>$insertion_end_time</span> - <span>$insertion_start_time</span>; print_r(<span>"插入排序耗时:"</span> . <span>$insertion_need_time</span> . <span>"<br>"</span>); <span>//2 冒泡排序</span><span><span>function</span><span>bubbleSort</span><span>(<span>$arr</span>)</span> {</span><span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> $arr); <span>$i</span>++) { <span>for</span> (<span>$j</span> = <span>0</span>; <span>$j</span> $i + <span>1</span>; <span>$j</span>++) { <span>if</span> (<span>$arr</span>[<span>$j</span>] $arr[<span>$j</span> - <span>1</span>]) { <span>$temp</span> = <span>$arr</span>[<span>$j</span> - <span>1</span>]; <span>$arr</span>[<span>$j</span> - <span>1</span>] = <span>$arr</span>[<span>$j</span>]; <span>$arr</span>[<span>$j</span>] = <span>$temp</span>; } } } <span>return</span><span>$arr</span>; } <span>$bubble_start_time</span> = microtime(<span>true</span>); <span>$bubble_sort</span> = bubbleSort(<span>$arr</span>); <span>$bubble_end_time</span> = microtime(<span>true</span>); <span>$bubble_need_time</span> = <span>$bubble_end_time</span> - <span>$bubble_start_time</span>; print_r(<span>"冒泡排序耗时:"</span> . <span>$bubble_need_time</span> . <span>"<br>"</span>); <span>//3 选择排序</span><span><span>function</span><span>selectionSort</span><span>(<span>$arr</span>)</span> {</span><span>$count</span> = count(<span>$arr</span>); <span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> $count - <span>1</span>; <span>$i</span>++) { <span>//找到最小的值</span><span>$min</span> = <span>$i</span>; <span>for</span> (<span>$j</span> = <span>$i</span> + <span>1</span>; <span>$j</span> $count; <span>$j</span>++) { <span>//由小到大排列</span><span>if</span> (<span>$arr</span>[<span>$min</span>] > <span>$arr</span>[<span>$j</span>]) { <span>//表明当前最小的还比当前的元素大</span><span>$min</span> = <span>$j</span>; <span>//赋值新的最小的</span> } } <span>/*swap$array[$i]and$array[$min]即将当前内循环的最小元素放在$i位置上*/</span><span>if</span> (<span>$min</span> != <span>$i</span>) { <span>$temp</span> = <span>$arr</span>[<span>$min</span>]; <span>$arr</span>[<span>$min</span>] = <span>$arr</span>[<span>$i</span>]; <span>$arr</span>[<span>$i</span>] = <span>$temp</span>; } } <span>return</span><span>$arr</span>; } <span>$selection_start_time</span> = microtime(<span>true</span>); <span>$selection_sort</span> = selectionSort(<span>$arr</span>); <span>$selection_end_time</span> = microtime(<span>true</span>); <span>$selection_need_time</span> = <span>$selection_end_time</span> - <span>$selection_start_time</span>; print_r(<span>"选择排序耗时:"</span> . <span>$selection_need_time</span> . <span>"<br>"</span>); <span>//4 并归排序</span><span>//merge函数将指定的两个有序数组(arr1arr2,)合并并且排序</span><span>//我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据</span><span><span>function</span><span>al_merge</span><span>(<span>$arrA</span>, <span>$arrB</span>)</span> {</span><span>$arrC</span> = <span>array</span>(); <span>while</span> (count(<span>$arrA</span>) && count(<span>$arrB</span>)) { <span>//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,</span><span>//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用</span><span>$arrC</span>[] = <span>$arrA</span>[<span>'0'</span>] $arrB[<span>'0'</span>] ? array_shift(<span>$arrA</span>) : array_shift(<span>$arrB</span>); } <span>return</span> array_merge(<span>$arrC</span>, <span>$arrA</span>, <span>$arrB</span>); } <span>//归并排序主程序</span><span><span>function</span><span>al_merge_sort</span><span>(<span>$arr</span>)</span> {</span><span>$len</span> = count(<span>$arr</span>); <span>if</span> (<span>$len</span> 1) <span>return</span><span>$arr</span>;<span>//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组</span><span>$mid</span> = intval(<span>$len</span> / <span>2</span>);<span>//取数组中间</span><span>$left_arr</span> = array_slice(<span>$arr</span>, <span>0</span>, <span>$mid</span>);<span>//拆分数组0-mid这部分给左边left_arr</span><span>$right_arr</span> = array_slice(<span>$arr</span>, <span>$mid</span>);<span>//拆分数组mid-末尾这部分给右边right_arr</span><span>$left_arr</span> = al_merge_sort(<span>$left_arr</span>);<span>//左边拆分完后开始递归合并往上走</span><span>$right_arr</span> = al_merge_sort(<span>$right_arr</span>);<span>//右边拆分完毕开始递归往上走</span><span>$arr</span> = al_merge(<span>$left_arr</span>, <span>$right_arr</span>);<span>//合并两个数组,继续递归</span><span>return</span><span>$arr</span>; } <span>$merge_start_time</span> = microtime(<span>true</span>); <span>$merge_sort</span> = al_merge_sort(<span>$arr</span>); <span>$merge_end_time</span> = microtime(<span>true</span>); <span>$merge_need_time</span> = <span>$merge_end_time</span> - <span>$merge_start_time</span>; print_r(<span>"并归排序耗时:"</span> . <span>$merge_need_time</span> . <span>"<br>"</span>); <span>//5 快速排序</span><span><span>function</span><span>quickSort</span><span>(&<span>$arr</span>)</span>{</span><span>if</span>(count(<span>$arr</span>)><span>1</span>){ <span>$k</span>=<span>$arr</span>[<span>0</span>]; <span>$x</span>=<span>array</span>(); <span>$y</span>=<span>array</span>(); <span>$_size</span>=count(<span>$arr</span>); <span>for</span>(<span>$i</span>=<span>1</span>;<span>$i</span>$_size;<span>$i</span>++){ <span>if</span>(<span>$arr</span>[<span>$i</span>]$k){ <span>$x</span>[]=<span>$arr</span>[<span>$i</span>]; }<span>elseif</span>(<span>$arr</span>[<span>$i</span>]><span>$k</span>){ <span>$y</span>[]=<span>$arr</span>[<span>$i</span>]; } } <span>$x</span>=quickSort(<span>$x</span>); <span>$y</span>=quickSort(<span>$y</span>); <span>return</span> array_merge(<span>$x</span>,<span>array</span>(<span>$k</span>),<span>$y</span>); }<span>else</span>{ <span>return</span><span>$arr</span>; } } <span>$quick_start_time</span> = microtime(<span>true</span>); <span>$quick_sort</span> = al_merge_sort(<span>$arr</span>); <span>$quick_end_time</span> = microtime(<span>true</span>); <span>$quick_need_time</span> = <span>$quick_end_time</span> - <span>$quick_start_time</span>; print_r(<span>"快速排序耗时:"</span> . <span>$quick_need_time</span> . <span>"<br>"</span>); </code>
耗时对比
插入排序耗时:1.2335460186005
冒泡排序耗时:2.6180219650269
选择排序耗时:1.4159741401672
并归排序耗时:0.17212891578674
快速排序耗时:0.16736888885498
参考资料
- 算法导论
以上就介绍了PHP实现经典算法上,包括了php,经典方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。
