php常用算法以及函数方法

1.冒泡排序

function mysort($arr){
	$len=count($arr);
    if($len <=1) return $arr;
    for($i=0;$i<$len;$i++){
        for($j=0;$j<$len-$i-1;$j++){
            if($arr[$j]<$arr[$j+1]){
                $temp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
        }
    }
    return $arr;
}

2.快速排序

function mysort($arr){
    $len=count($arr);
    if($len <=1) return $arr;
    $base = $arr[0];
    $left=[];
    $right=[];
    for ($i=1;$i<$len;$i++){
        if($arr[$i]<$base){
            $left[]=$arr[$i];
        }else{
            $right[]=$arr[$i];
        }
    }
    $left=mysort($left);
    $right=mysort($right);
    return array_merge($left,array($base),$right);
}

3.斐波那契数列

function myfun($num){
   if($num<=0) return 0;
   $arr[1]=$arr[2]=1;
   for ($i=3;$i<=$num;$i++){
       $arr[$i]=$arr[$i-1]+$arr[$i-2];
   }
    return $arr;
}
//递归写法
function myfun1($num){
   return $num<2?1:myfun1($num-1)+myfun1($num-2);
}

4.文件加锁和解锁

$fp=fopen('./test.txt','w+');//读写方式打开,每次打开清空
if(flock($fp,LOCK_EX)){//锁定文件-2
	fwrite($fp,'write something');
	flock($fp,LOCK_UN);//取消锁定-3
}else{
	echo 'is locking';
}
fclose($fp);

5.遍历文件夹

function mydir($dir){
       $files=[];
       if(is_dir($dir)){
           if($handle=opendir($dir)){
               while (false != ($file=readdir($handle))){
                   if($file != '.' && $file !='..'){
                       if(is_dir($dir.'/'.$file)){
                           $files[$file]=mydir($dir.'/'.$file);
                       }else{
                           $files[]=$dir.'/'.$file;
                       }
                   }
               }
           }
       } else{
           return false;
       }
       return $files;
    }

6.传一个字符串,返回排序好的字符串/返回出现次数最多的字母

function mystring($str){
	$arr = str_split($str);
	$res=array_flip(array_flip($arr));//数组去重并重新建立索引
	sort($res);
	return implode('',$res);

}
function mystring($str){
	$arr = str_split($str);
	$res=array_count_values($arr);//计算值得次数
	arsort($res);
	reset($res);
	$res=key($res);
	return $res;

}

7.从url中获取扩展名

function getN($url){
	$arr=parse_url($url);
	$file=basename($arr['path']);
	$file=explode('.',$file);
	return array_pop($file);
}

8.获取上个月的第一天和最后一天

//第一天
$day = date('Y-m-01',strtotime('-1 month'));
//最后一天
$day = date('Y-m-t',strtotime('-1 month'));

9.一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。

function myfun($m,$n){
    $monkeys = range(1,$n);
    $i=0;
    while (count($monkeys)>1){
        if(($i+1)%$m==0){
            unset($monkeys[$i]);
        }else{
            array_push($monkeys,$monkeys[$i]);
            unset($monkeys[$i]);
        }
        $i++;
    }
    return current($monkeys);
}
echo myfun(2,3);

10.有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛

function niu($y){
  static $cow=1;
  for ($i=1;$i<=$y;$i++){
      if($i>=4 && $i<15){
          $cow++;
          niu($y-$i);
      }elseif($i==20){
          $cow--;
      }
  }
  return $cow;
}
echo niu(8);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
├──Package │ ├── Sort 排序篇 │ │ ├── BubbleSort.php 冒泡排序 │ │ ├── HeapSort.php 堆排序 大根堆 │ │ ├── MBaseSort.php 基数排序 MSD │ │ ├── LBaseSort.php 基数排序 LSD │ │ ├── QuickSort.php 快速排序 │ │ ├── ShuttleSort.php 飞梭排序 │ │ ├── ShellSort.php 希尔排序 │ │ ├── MergeSort.php 归并排序 │ │ ├── InsertSort.php 插入排序 │ │ └── SelectSort.php 选择排序 │ │ │ ├── Query 查找篇 │ │ ├── BinaryQuery.php 二分查找 │ │ ├── InseertQuery.php 插入查找 │ │ ├── FibonacciQuery.php 斐波那契查找 │ │ ├── BFSQuery.php 广度优先查找 │ ├── Kmp.php 算法导论-KMP算法 │ ├── DijkstraQuery.php 迪克斯特拉算法 │ │ └── QulickQuery.php 快速查找 │ │ │ ├── Structure 数据结构 │ │ ├── StackExample.php 堆栈 先进后出 LIFO (Last In First Out) │ │ ├── LinearChain.php 线性表 单链存储 │ │ └── LinearOrder.php 线性表 顺序存储 │ │ └── BinarySearchTree.php 二叉搜索树 │ │ │ ├── Tools 小工具集 │ │ └── SystemSwitch.php 堆栈实现进制转换 │ │ │ └── Other 其他 │ ├── MonkeyKing.php 约瑟夫环 │ ├── DynamicProgramming.php 动态规划 │ ├── Fibonacci.php 斐波那契数列 │ ├── StealingApples.php 偷苹果求余 │ ├── HanoiGames.php 汉诺塔游戏 │ ├── BidirectionalQueue.php 双向队列 │ ├── ColorBricks.php 彩色砖块 │ ├── GetCattle.php 牛年求牛 │ ├── OnlyNumbers.php 求唯一数 │ ├── PokerGames.php 洗扑克牌 │ ├── Interval.php 抽奖区间算法 │ ├── Maze.php 迷宫寻址算法 │ ├── AntsClimb.php 蚂蚁爬杆算法 │ ├── Encryption.php 对称加密算法 │ ├── ElevatorDispatch.php 编程之美-电梯调度算法 │ ├── PointInTriangle.php 向量叉集计算点是否在三角形中 │ ├── TraversalOfBinary.php 二叉树非递归遍历算法实现 │ ├── Knapsack.php 贪心算法之背包问题实现 │ └── BigSmallReplace.php Hello World 输出 Olleh Dlrow │ └── Solution.php Facebook面试题之岛屿周长算法 │ └── RotationSort.php Facebook面试题之顺时针回旋算法 │ └── Square.php Facebook面试题之判断四个点能否组成正方形算法 │ └── Prim.php Prim算法(最小生成树算法) │ └── CartesianProduct.php 笛卡尔积算法 │ └── Square.php 面试题之平面任意四点能否组成一个矩形 │ └── Judge.php 面试题之扑克牌中任选五张判断是不是顺子 │ └── Factorial.php 面试题之N的阶乘末尾有多少个0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值