php实现算法
二分法查找(已排序)
@params $arr 查找的数组 $start 开始查找的下标 $end 结束查找的下标 $value 查找的值
function bin_search($arr,$start,$end,$value){
if($start<=$end){
//折半查找对比,获取$value落在哪一半的区域
$mid=int(($start+$end)/2);
if($arr[$mid]==$value){
return $mid;
}else if($arr[$mid]>$value){
return bin_search($arr,$start,$mid-1,$value);
}else{
return bin_serach($arr,$mid+1,$end,$value);
}
}
return -1;
}
快速排序
原理:选择某个值为基准然后遍历,比基准值大的放到基准值右边,小的放左边,递归地把基准左右两边的值排序
function quit_sort($arr){
$baseValue=$arr[0];//选取第一个单元为基准值
$leftArr=[];//基准左边数组
$rightArr=[];//基准右边数组
$length=count($arr);
for($i=1;$i<$length;$i++){
if($arr[$i]<$baseValue){
$leftArr[]=$arr[$i];//塞到左边
}else{
$rightArr[]=$arr[$i];
}
}
if(!empty($leftArr)){
$leftArr=quit_sort($leftArr);//递归再次排序
}
if(!empty($rightArr)){
$rightArr=quit_sort($rightArr);
}
return array_merge($leftArr,[$baseValue],$rightArr);
}
冒泡排序
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,依次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端
function bubbleSort($arr){
$len=count($arr);
if($len>1){
//外层控制冒泡轮数 ,应为$len-1轮
for($i=1;$i<$len;$i++){
//内层控制每冒出一个数要比较的次数,应为 数组长度-轮数
for($k=0;$k<($len-$i);$k++){
if($arr[$k]>$arr[$k++]){
$temp=$arr[$k];
$arr[$k]=$arr[$k+1];
$arr[$k+1]=$temp;
}
}
}
return $arr;
}
}
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
function selectSort($arr){
$len=count($arr);
//控制比较次数
for($i=0;$i<($len-1);$i++){
//先假设最小的值的位置
$p=$i;
//$k 当前都需要和哪些元素比较,$i 后边的。
for($k=($i+1);$k<$len;$k++){
//$arr[$p] 是 当前已知的最小值
if($arr[$k]<$arr[$p]){
//比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。
$p=$k;
}
}
if($p!=$i){
//已经确定了当前的最小值的位置,保存到$p中。
//如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
$temp=$arr[$i];
$arr[$i]=$arr[$p];
$arr[$p]=$temp;
}
}
return $arr;
}
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#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
随机推荐
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- slax linux的定制
由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...
- 什么是Servlet容器?
在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...
- mybatis参数形式
1 使用map <select id="selectRole" parameterType="map" resultType="RoleMap& ...
- ArcGIS超级工具SPTOOLS-编号工具
1.1 整库更新BSM 输入一个MDB或GDB,将所有的要素类和表,按某个字段BSM,BSM不存在,会自动创建,从某个开始,顺序编号. 1.2 更新BSM 根据自己输入的多个表或要素,可以自己编号 ...
- Flume-自定义 Sink
Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统.或者被发送到另一个 Flume Agent. Sink 是完全事务性的. 在从 Channel 批 ...
- PHP魔术方法和魔法变量详解
一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对 ...
- java基于jcifs.smb实现远程发送文件到服务器
1.服务器指定共享文件夹 1.1.验证服务器共享文件夹本地可以访问: 2.导入依赖的相关jar包 jcifs-1.3.**.jar: <dependency> <gr ...
- 轻量级通用上采样算子-CARAFE
转载:https://zhuanlan.zhihu.com/p/76063768 前言 这篇论文被 ICCV 2019 接收为 oral presentation.之前我们主要研究物体检测(例如 Hy ...
- eclipse快捷键整理
编辑 Ctrl+1 快速修复(最经典的快捷键,就不用多说了,可以解决很多问题,比如import类.try catch包围等)Ctrl+Shift+F 格式化当前代码Ctrl+Shift+M 添加类的i ...