PHP经典算法题

本文介绍了两种排序算法:冒泡排序与快速排序,并通过PHP代码实现。此外,还提供了一个有趣的猴子游戏算法,用于找出特定条件下的胜者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、冒泡排序(从小到大)

public function test() {
 $arr =array('1','12','9','7','3','15','46','2');
 $num = count($arr);
 for($i=0;$i<$num;$i++) {
  for($j=1;$j<$num-$i;$j++) {
   if($arr[$j]>$arr[$j+1]) {
      $temp = $arr[$j];
      $arr[$j] = $arr[$j+1];
      $arr[$j+1] = $temp;
   }
  }
 }
 var_dump($arr);
}
2、快速排序
public function test($arr) {
 $num = count($arr);
 if($num<2) {
  return $arr;
 }
 $key = $arr[0];
 for($i=2;$i<$num;$i++) {
  if($arr[$i] > $key) {
     $r_arr[] = $arr[$i];
  } else {
     $l_arr[] = $arr[$i];
  }
 }
 #别忘记递归调用
 $l_arr = test($l_arr);
 $l_arr[] =$key;
 $r_arr = test($r_arr);
 $arr1 = array_merge($l_arr, $r_arr);
 return $arr1;
}

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

public function test($m, $n) {
 $arr = range(1, $n);//创建数组
 $num = count($arr);
 $i = 0;
 while($num<1) {
  ++$i;//同等于$i +=1  $head = array_shify($arr);#获取数组中第一个数值
  if($i%$m!=0) {
   array_push($arr, $head);
  }
 }
 return $arr[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、付费专栏及课程。

余额充值