[TOC]
## 冒泡排序 O(n2)
```
依次对比相邻的值,符合条件(大于或小于)则交换位置
function sort_maopao($array){
if(count($array) <= 1){
return $array;
}
$num = count($array);
for($i=0;$i<$num;$i++){
for($j=0;$j<$num-$i-1;$j++){
if($array[$j] > $array[$j+1]){
list($array[$j],$array[$j+1]) = [$array[$j+1],$array[$j]];
}
}
}
return $array;
}
```
## 二分法 O(log2n)
```
function erfen($array,$a){
if(count($array) <= 1){
return $array;
}
$min = 0;
$max = count($array)-1;
while(true){
if($min<=$max){
$mid = floor(($min+$max)/2);
if($array[$mid]==$a){
echo 'find';break;
}elseif($array[$mid]>$a){
$max = $mid-1;
}elseif($array[$mid] < $a){
$min = $mid+1;
}
}else{
echo 'no find';break;
}
}
}
```
## 快速排序O(nlogn)
```
function quickSort($arr){
if(count($arr)>1){
$count = count($arr);
$mid = $arr[0];
$low = [];
$hight = [];
for($i=1;$i<$count;$i++){
if($arr[$i] > $mid){
$hight[] = $arr[$i];
}else{
$low[] = $arr[$i];
}
}
$low = quickSort($low);
$hight = quickSort($hight);
$end = array_merge($low,[$mid],$hight);
return $end;
}else{
return $arr;
}
}
```
## 插入排序O(n2)
```
function sort_insert($array ){
if(count($array) <=1){
return $array;
}
$count = count($array);
for($i=1;$i<$count;$i++){
for($j=0;$j<$count-1;$j++){
if($array[$i] > $array[$j]){
list($array[$j],$array[$i]) = [$array[$i],$array[$j]];
}
}
}
return $array;
}
```
## 选择排序O(n2)
```
function selectSort($arr) {
$len=count($arr);
for($i=0; $i<$len-1; $i++) {//双重循环完成,外层控制轮数,内层控制比较次数
$p = $i;//先假设最小的值的位置
for($j=$i+1; $j<$len; $j++) {
if($arr[$p] > $arr[$j]) {//$arr[$p] 是当前已知的最小值
$p = $j;//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr[$p];//3
$arr[$p] = $arr[$i];//4
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
```
## 小牛
```
有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,
到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛。
function niu($year){
static $num = 1;
for($i=1;$i<=$year;$i++){
if($i>=4 && $i<15){
$num++;
niu($year-$i);
}
if($i==20){
$num--;
}
}
return $num;
}
```
## 猴子大王,约瑟夫环
```
function mk($n ,$m){
$arr = range(1,$n);
$i=1;
while(count($arr)>1){
if($i % $m != 0){
array_push($arr,$arr[$i-1]);
}
unset($arr[$i-1]);
$i++;
}
return $arr[$i-1];
}
```
## 买股票收益
```
//[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,
//在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
// 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;
同时,你不能在买入前卖出股票。
function gupiao($arrPrice) {
$len = count($arrPrice);
if($len <2){
return '不符合';
}
$min = $arrPrice[0];
$maxProfit = 0;
for($i=1;$i<$len;$i++){
$profit = $arrPrice[$i]-$min;
$maxProfit = $maxProfit< $profit ? $profit : $maxProfit;
if($min>$arrPrice[$i]){
$min = $arrPrice[$i];
}
}
return $maxProfit;
}
```
## 求两文件相对路径
```
function test($apth,$bpth){
//拆分成数组
$a = explode('/', $apth);
$b = explode('/', $bpth);
//将两个数组的索引重置
$c = array_values(array_diff($a, $b));//[c,d,e.php]
$d = array_values(array_diff($b, $a));//[12,34,c.php]
//去除掉a路径的文件名
array_pop($c);
//将a路径中的目录名替换为..
foreach ($c as &$v) $v = '..';
return implode("/",array_merge($c,$d));
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
//var_dump(test($a,$b));die;
```
## 递归目录
```
function file_list($path){
if ($handle=opendir($path)) {
while (false!== ($file=readdir($handle))) {
if ($file!="."&&$file!="..") {
if (is_dir($path."/".$file)) {
echo $path.": ".$file."";//去掉此行显示的是所有的非目录文件
file_list($path."/".$file);
} else {
echo $path.": ".$file."";
}
}
}
}
}
```
## 给出一个字符串,返回里面连续字母的个数,比如:abbcddde,返回 1a2b1c3de;
```
function strNum($str){
$endStr = '';
$wordArr = str_split($str);
$num = count($wordArr);
$key = 0;
for($i=0;$i<$num;$i++){
$word = $wordArr[$i];
if($word == $wordArr[$i+1]){
continue;
}else{
$endStr .= ($i-$key+1).$word;
$key = $i+1;
}
}
return $endStr;
}
```
- 消息队列
- 为什么要用消息队列
- 各种消息队列产品的对比
- 消息队列的优缺点
- 如何保证消息队列的高可用
- 如何保证消息不丢失
- 如何保证消息不会重复消费?如何保证消息的幂等性?
- 如何保证消息消费的顺序性?
- 基于MQ的分布式事务实现
- Beanstalk
- PHP
- 函数
- 基础
- 基础函数题
- OOP思想及原则
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收机制
- php-fpm相关
- 高级
- 设计模式
- 排序算法
- 正则
- OOP代码基础
- PHP运行原理
- zavl
- 网络协议new
- 一面
- TCP和UDP
- 常见状态码和代表的意义以及解决方式
- 网络分层和各层有啥协议
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 锁
- 索引
- 事务
- 高可用?高并发?集群?
- 其他
- 主从复制
- 主从复制数据延迟
- SQL的语⾔分类
- mysqlQuestions
- Redis
- redis-question
- redis为什么那么快
- redis的优缺点
- redis的数据类型和使用场景
- redis的数据持久化
- 过期策略和淘汰机制
- 缓存穿透、缓存击穿、缓存雪崩
- redis的事务
- redis的主从复制
- redis集群架构的理解
- redis的事件模型
- redis的数据类型、编码、数据结构
- Redis连接时的connect与pconnect的区别是什么?
- redis的分布式锁
- 缓存一致性问题
- redis变慢的原因
- 集群情况下,节点较少时数据分布不均匀怎么办?
- redis 和 memcached 的区别?
- 基本算法
- MysqlNew
- 索引new
- 事务new
- 锁new
- 日志new
- 主从复制new
- 树结构
- mysql其他问题
- 删除
- 主从配置
- 五种IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何实现手机扫码登录功能
- laravel框架的生命周期