算法整理(php语言完成),持续更行中......
一下所有实例中,均在同一个方法中,所以算法使用内部函数完成
- 归并排序
public function test1Action () {
$tmp = 0;
$al_merge = function($arrA,$arrB)use (&$tmp)
{
$arrC = array();
while(count($arrA) && count($arrB)){
//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,
//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用
$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);
} return array_merge($arrC, $arrA, $arrB);
};
//归并排序主程序
$function1 = function($arr)use(&$function1,&$al_merge,&$tmp){
$len = count($arr);
if($len <= 1)
return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组
$mid = intval($len/2);//取数组中间
$left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr
$right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr
$left_arr = $function1($left_arr);//左边拆分完后开始递归合并往上走
$right_arr = $function1($right_arr);//右边拆分完毕开始递归往上走
$arr = $al_merge($left_arr, $right_arr);//合并两个数组,继续递归 return $arr;
};
$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);
print_r($function1($arr));die();
}
- 二分法查找(递归)
public function test1Action () {
$array = array(1,2,3,4,5,6,7,8,9);
$search = function ($array,$low,$height,$value)use (&$search) {
if ( $low > $height ) {
return '没有找到合适的值';
} else {
$mid = floor(($low+$height)/2);
if ( $value == $array[$mid] ) {
return $mid;
} elseif ( $value < $array[$mid] ) {
return $search($array,$low,$mid-1,$value);
} else {
return $search($array,$mid+1,$height,$value);
}
}
};
$result = $search($array,0,count($array),9);
echo $result;die();
}
- 二分法查找(非递归)
public function test1Action () {
$array = array(1,2,3,4,5,6,7,8,9);
$search = function ($array,$low,$height,$value)use (&$search) {
while ( $low < $height ) {
$mid = intval(($low+$height)/2);
if ( $value == $array[$mid] ) {
return $mid;
} elseif ( $value < $array[$mid] ) {
$height = $mid-1;
} else {
$low = $mid + 1;
}
}
};
$result = $search($array,0,count($array),9);
echo $result;die();
}
算法整理(php语言完成),持续更行中......的更多相关文章
- 常见排序算法整理(python实现 持续更新)
1 快速排序 快速排序是对冒泡排序的一种改进. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行 ...
- 【算法】C语言趣味程序设计编程百例精解
C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1) https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...
- 笔记整理--C语言
linux下错误的捕获:errno和strerror的使用 - Google Chrome (2014/2/26 17:31:39) linux下错误的捕获:errno和strerror的使用 201 ...
- 【最全】经典排序算法(C语言)
算法复杂度比较: 算法分类 一.直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中. 它的算法步骤可以大致归纳如下: 从未排好的序列中拿出首 ...
- 排序算法总结(C语言版)
排序算法总结(C语言版) 1. 插入排序 1.1 直接插入排序 1.2 Shell排序 2. 交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择 ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
- 魔方阵算法及C语言实现
1 魔方阵概念 填充的,每一行.每一列.对角线之和均相等的方阵,阶数n = 3,4,5….魔方阵也称为幻方阵. 例如三阶魔方阵为: 魔方阵有什么的规律呢? 魔方阵分为奇幻方和偶幻方.而偶幻方又分为是4 ...
- 1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 10 ...
- 排序算法的C语言实现(上 比较类排序:插入排序、快速排序与归并排序)
总述:排序是指将元素集合按规定的顺序排列.通常有两种排序方法:升序排列和降序排列.例如,如整数集{6,8,9,5}进行升序排列,结果为{5,6,8,9},对其进行降序排列结果为{9,8,6,5}.虽然 ...
随机推荐
- JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据
目录 一. PCM格式是什么 二. 浏览器中的音频采集处理 三. 需求实现 方案1--服务端FFmpeg实现编码 方案2--ScriptProcessorNode手动处理数据流 参考文献 示例代码托管 ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 百度语音合成---前端vue项目
☞:官方文档 ☞:网页示例 具体步骤: 1.通过 socket.io 接收后端传过来的数据. 2.判断是否在播放声音. 如果没有则直接获取百度 token 播放声音 3.如果有,则存入数组.声音播放 ...
- Rust 中的类型转换
1. as 运算符 as 运算符有点像 C 中的强制类型转换,区别在于,它只能用于原始类型(i32 .i64 .f32 . f64 . u8 . u32 . char 等类型),并且它是安全的. 例 ...
- VS2008给图标工具栏-状态栏添加响应函数
1.在对话框的:OnInitDialog()函数中添加以下红色代码: BOOL CGSM_MessageDlg::OnInitDialog() { CDialog::OnInitDialog(); / ...
- C++学习笔记13_操作MySql
1. 链接Mysql #include <winsock.h>#include "mysql.h"#include <stdlib.h>#include & ...
- CSPS模拟 89
- 使用springcloud开发测试问题总结
使用springcloud开发测试 如下描述的问题,没有指明是linux部署的,都是在windows开发环境上部署验证发现的. Issue1配置客户端不使用配置中心 问题描述: 配置客户端使用配置中心 ...
- [转载]2.2 UiPath条件判断活动Flow Decision的介绍和使用
一.Flow Decision介绍 FlowDecision节点是一个条件节点,它根据指定条件是否成立来控制流程的两个分支. 当条件为True时,流程执行一个分支 当条件为False时,流程执行另外一 ...
- GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建
1.通过GPIO库函数控制LED open("/dev/myleds",...) close(fd) ----------------------------- ...