PHP算法
一,实现快速排序
<?php
function quickSort($arr) {
$len=count($arr) ;
if($len<=1) {
return $arr;
}
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<$len;$i++) {
if($arr[$i]<=$key) {
$left_arr[]=$arr[$i];
}else {
$right_arr[]=$arr[$i];
}
}
$left_arr=quickSort($left_arr);
$right_arr=quickSort($right_arr);
return array_merge($left_arr,array($key),$right_arr); }
$table=array(45,12,65,23,67,66,22,78,42);
print_r(quickSort($table));
方法是
1、建立一个quickSort()的函数,首先设置先设置一个变量为该数组的第一位,
2、接下来的该数组数值与第一位比较,若大于第一位,则分化到$right_arr这个数组里去,反之,则划分到$left_arr的数组里;
3、然后$right_arr和$left_arr在不断调用quickSort()这个函数;
4、使用array_merge()将所有分开的数组合并为一个数组。
二、冒泡法
<?php
function maopaoSort($array){
$len=count($array);
if($len<=1) {
return $array;
}
for($i=0;$i<$len;$i++) {
for($j=$len-1;$j>$i;$j--) {
if($array[$j]>$array[$j-1]){
$tmp=$array[$j];
$array[$j]=$array[$j-1];
$array[$j-1]=$tmp;
}
}
}
return $array;
} $arr=array(32,43,21,54,15,17,13,18,43,87);
print_r(maopaoSort($arr));
三、杨辉三角
<?php
function yanghui($n){
for($i=0;$i<$n;$i++){
for($j=0;$j<=$i;$j++){
if($j==0||$i==$j){
$arr[$i][$j]=1;
}else {
$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
}
echo $arr[$i][$j]."\t";
}
echo "<br>";
}
}
yanghui(10);
四、二分法
<?php
/**二分查找:查找一个值在数组中的位置
* @$arr:操作的数组,前提是按顺序排列
* @$val:查找的值
* @$low:查找的起始位置,默认从数组的第一个数找起
* @hight:查找的结束位置
**/
function binarySearch($arr, $val, $hight, $low=0){
while($low <= $hight){
$mid = ceil($low + ($hight - $low) / 2);
if($arr[$mid] == $val){
return $mid;
}elseif($arr[$mid] > $val){
$hight = $mid -1;
}else{
$low = $mid +1;
}
}
return -1;
}
header('Content-Type:text/html; charset=utf-8'); //产生一个数组
$arr = range(0,20);
echo '<pre>';
print_r($arr);
echo '</pre>'; $low = 0;
$hight = count($arr) - 1;
$findVal = rand(0, 20);
$index = binarySearch($arr, $findVal, $hight, $low);
printf("查找的值 '%d' 在数组中的下标 '%s'", $findVal, $index);
?>
PHP算法的更多相关文章
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
- 简单有效的kmp算法
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- 46张PPT讲述JVM体系结构、GC算法和调优
本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
随机推荐
- Sublime2 + SASS + Koala 测试
Sublime SASS语法高亮插件下载地址:https://github.com/kuroir/SCSS.tmbundle/zipball/SublimeText2 koala_2.0.4_setu ...
- python 百题计划
一.基础篇 想要像类似执行shell脚本一样执行Python脚本,需要在py文件开头加上什么?KEY:#!/usr/bin/env python Python解释器在加载 .py 文件中的代码时,会对 ...
- jdbc connection为什么放在webINF的lib里面
jdbc connection为什么放在webINF的lib里面
- listening 1
It was regrettable that such great issues had to be the thrust and parry of a general election. But ...
- 【SQL查询】查询的列起别名_AS
方法一: 以as关键字指定字段别名,as在select的字段和别名之间. 方法二: 直接在字段名称后面加上别名,中间以空格隔开.
- mapper.xml文件中标签不显示问题
1.配置mybatis-3-mapper.dtd 2.配置mybatis-3-config.dtd 3.结果所示:
- [ZOJ2587]Unique Attack
vjudge sol 最小割判定唯一性. 只要做完一个任意最小割后,判断一下是不是所有点都要么和\(S\)相连,要么和\(T\)相连. 只要两边各一次\(dfs\)就行了. code #include ...
- c#生成唯一编号方法记录,可用数据库主键 唯一+有序
数据库主键目前主要有两种: a.自增数值型 优:占用空间小,插入快,有序对索引友好,易懂 缺:多数据库迁移会有重复键值问题,有可能爆表 b.GUID 优:多数据库唯一 缺:占用空间大,无序对索引不友好 ...
- ubuntu lts install licode tag pre-v5.4
1. Requirements Ubuntu 14.04 LTS 2. Clone Licode codeYou first need to clone our code from github.Yo ...
- AngularJS:API
ylbtech-AngularJS:API 1.返回顶部 1. AngularJS API API 意为 Application Programming Interface(应用程序编程接口). An ...