PHP-----二维数组和二分查找

二维数组由行和列组成。由arr[$i][$j]表示,先后表示行和列,类似于坐标点。
打印二维数组-----通过两次遍历,第一次遍历每一行,第二次遍历每一行的具体元素,并且通过使用count($arr[$i])---代表每一行有几个元素,使代码适应性更好,可以打印不规则的二维数组。
转置矩阵-----颠倒行和列的值,然后再次遍历即可。
<?php
//1.打印一个二维数组
$arr=array(
array(1,2,3,4,5,6),
array(2,2,3,1,2,5),
array(0,9,8,7,5,0,9),
array(3,5,6,7,8,3,5)
);
/*for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]." ";
}
echo "<br/>";
}*/
//转置上面的矩阵
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
$arr2[$j][$i]=$arr[$i][$j];
}
}
//遍历数组2
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr[$i]);$j++){
echo $arr[$i][$j]." ";
}
echo "<br/>";
} ?>
顺序查找:直接通过遍历一次数组实现。
$arr=array(1,2,4,6,7,8);
function search(&$arr,$find){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($find==$arr[$i]){
echo 'find'.$i;
$flag=true;
break;
}
}
if(!$flag){
echo 'Not find!';
}
$flag=false;
}
search($arr,4);
二分查找-----和快速排序的原理有点类似。首先排除特例,如果左边的下标大于右边直接退出(这表示数组不是有序数组);计算数组的中间下标值,并用round函数取整;如果需要查找的数大于数组的中间值,那么就把中间值的下标+1,如果需要查找的数小于数组的中间值,那么就把中间值的下标-1;如果需要查找的数等于数组的中间值,直接输出。二分查找运用了递归。
//二分查找(必须是有序数组才能使用二分查找)
function binaryFind(&$arr,$find,$leftIndex,$rightIndex){
if($leftIndex>$rightIndex){
echo 'not find';
return;
}
$middleIndex=round(($leftIndex+$rightIndex)/2);//四舍五入 if($find>$arr[$middleIndex]){
binaryFind($arr,$find,$middleIndex+1,$rightIndex);//右边增加了一个数
}elseif($find<$arr[$middleIndex]){
binaryFind($arr,$find,$leftIndex,$middleIndex-1);//左边增加了一个数
}else{
echo "$middleIndex";
}
}
$arr=array(1,2,4,6,7,8);
binaryFind($arr,0,0,count($arr)-1);//下标需要减一,去除查询数他本身
打印乘法表
//打印乘法表
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
echo "$j*$i=".$i*$j;
echo ' ';
}
echo "<br/>";
}
评委打分小实例-----运用了假设的思想,一步一步的假设,然后判断可行性。
//计算打分
function findMin(&$arr){
$minScore=$arr[0];
$minIndex=0;
for($i=1;$i<count($arr);$i++){
if($minScore>$arr[$i]){
$minScore=$arr[$i];
$minIndex=$i;
}
}
return $minIndex;
}
function findMax(&$arr){
$maxScore=$arr[0];
$maxIndex=0;
for($i=1;$i<count($arr);$i++){//$i=1;
if($maxScore<$arr[$i]){
$maxScore=$arr[$i];
$maxIndex=$i;
}
return $maxIndex;
}
}
$arr=array(20,90,40,80,88,89,50);
$minIndex=findMin($arr);
$maxIndex=findMax($arr); $sum=0;
for($i=0;$i<count($arr);$i++){
if($i!=$minIndex && $i!=$maxIndex){
$sum+=$arr[$i];
}
} echo "key is".$minIndex."last score is".$arr[$minIndex]."<br/>";
echo "key is".$maxIndex."top score is".$arr[$maxIndex]."<br/>";
echo "平均成绩是".$sum/(count($arr)-2);
$avarage=$sum/(count($arr)-2);
//找出最佳评委
$different=abs($arr[0]-$avarage);//差值取绝对值,假设第一位就是最佳评委
$goodIndex=0;
for($i=0;$i<count($arr);$i++){
if($different>abs($arr[$i]-$avarage)){
$different=abs($arr[$i]-$avarage);
$goodIndex=$i;
}
}
echo "最佳评委是".$i;
成绩查询小实例
html页面----关于input元素的type类型
| button | 定义可点击按钮(多数情况下,用于通过 JavaScript 启动脚本)。 |
| checkbox | 定义复选框。 |
| file | 定义输入字段和 "浏览"按钮,供文件上传。 |
| hidden | 定义隐藏的输入字段。 |
| image | 定义图像形式的提交按钮。 |
| password | 定义密码字段。该字段中的字符被掩码。 |
| radio | 定义单选按钮。 |
| reset | 定义重置按钮。重置按钮会清除表单中的所有数据。 |
| submit | 定义提交按钮。提交按钮会把表单数据发送到服务器。 |
| text | 定义单行的输入字段,用户可在其中输入文本。默认宽度为 20 个字符。 |
<html>
<head>
<title></title>
</head>
<body>
<form action="arr2222.php" method="post">
<input type="text" placeholder="请输入要搜索的学号" name="stuNum">
<input type="hidden" name="doing" value="seaNum">
<input type="submit" value="提交">
</form>
<form action="arr2222.php" method="post">
<input type="text" placeholder="请输入要搜索的成绩" name="stuGra">
<input type="hidden" name="doing" value="seaGra">
<input type="submit" value="提交">
</form>
<form action="arr2222.php" method="post">
<input type="hidden" name="doing" value="seaStep">
<input type="submit" value="查询成绩范围">
</form>
</body>
</html>
php页面-----通过判断name==value来选择执行那一块的代码;运用$flag变量来控制if判断流程;最后一个elseif创建了一个虚拟的数组来存放学生成绩。
<?php
$arr=array(20,56,59,80,90,100,88,81,79,66,59);
$doing=$_REQUEST['doing'];
//$seaStep=$_REQUEST['seaStep']; function showGrade($stuNum,&$arr){
return $arr[$stuNum];
}
function showNum($stuGra,&$arr){
$flag=false;
for($i=0;$i<count($arr);$i++){
if($stuGra==$arr[$i]){
echo '学号为'.$i.'成绩为'.$stuGra;
$flag=true;
}
}
if($flag==false){
echo "没有此成绩";
}
} if($doing=='seaNum'){
$stuNum=$_REQUEST['stuNum'];//接受的是序号
echo "该学生的成绩是".showGrade($stuNum,$arr);
}elseif($doing=='seaGra'){
$stuGra=$_REQUEST['stuGra'];
showNum($stuGra,$arr);
}elseif($doing=='seaStep'){ $arr2=array(0,0,0,0,0); for($i=0;$i<count($arr);$i++){
if($arr[$i]>=0 && $arr[$i]<=59){
$arr2[0]+=1;
}elseif($arr[$i]>=60 && $arr[$i]<=69){
$arr2[1]+=1;
}elseif($arr[$i]>=70 && $arr[$i]<=79) {
$arr2[2]+=1;
}elseif($arr[$i]>=80 && $arr[$i]<=89) {
$arr2[3]+=1;
}elseif($arr[$i]>=90 && $arr[$i]<=100) {
$arr2[4]+=1;
}
}
echo "1----".$arr2[0].'<br/>'."2----".$arr2[1].'<br/>'."3----".$arr2[2].'<br/>'."4----".$arr2[3].'<br/>'."5----".$arr2[4];
}
?>
PHP-----二维数组和二分查找的更多相关文章
- [算法][LeetCode]Search a 2D Matrix——二维数组的二分查找
题目要求 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the ...
- [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找
一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...
- 剑指offer65:矩阵中的路径(二维数组,二分查找)
1 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...
- 《剑指Offer》面试题-二维数组中的查找
题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...
- 题目一:使用Java实现二维数组中的查找
考点:数组 题目:二维数组中的查找 描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判 ...
- 剑指Offer - 九度1384 - 二维数组中的查找
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 剑指offer:二维数组中的查找
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...
- 《剑指offer》二维数组中的查找
一.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.输入描述 ar ...
- 剑指Offer面试题:2.二维数组中的查找
一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 剑指Offer:面试题3——二维数组中的查找(java实现)
问题描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:取数组中的元素与 ...
随机推荐
- P4实验问题 解决python模块导入
参考:Python导入自定义包或模块 在执行./run_demo.sh的过程中,遇到了python的模块问题: root@ubuntu:/home/wasdns/tutorials/SIGCOMM_2 ...
- flush vs ob_flush
刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等).该函数将当前为止程序的所有输出发送到用户的浏览器. flush() 函数不会对服务器或客户端浏览器的缓存模式产生影响. ...
- jquery 判断时间
$("#gjlycon1").blur(function () { var v = $(this).val(); v ...
- [daily][device] linux添加打印机
只用过HP的打印机,用过两个,分别是:HP_p2055dn, 和 HP_LaserJet_Professional_M1216nfh 别的不知道.以下内容仅试用于HP打印机. 第一:装HP,打印机工 ...
- 下拉列表select显示ng-options
js中如何处理: it-equipment-list-maintenance-create-controller.js 'use strict'; myApp.controller( 'itEquip ...
- Nhiberate (二) 搭项目
使用: visual studio 2015 ;SQL SERVER 2012. 参考.测试可用 其中有点不太一样的地儿, ISession 的泛型方法: 用了 QueryOver<>,转 ...
- iOS,视图控制器相关(UIViewController)
1.视图控制器各个方法调用时机 2.选项卡(Tab Bar)和导航栏(Navigation Bar) 3.有无控制器的页面跳转 4.页面跳转隐藏底部选项卡 5.获取导航栏和状态栏高度,隐藏导航栏返回按 ...
- copy file to docker、
Docker是个Linux Container管理软件. 今天我们来讲解一下从主机复制文件到Docker的几种方法. 在分享之前, 我们看看Docker社区对这个问题的需求是有多么强(ju)烈(jin ...
- 并发案例--ScheduledExecutorService用法
InstanceFactory.getInstance(ScheduledExecutorService.class).schedule(new Callable<Object>() { ...
- elasticsearch基础
elastic使用lucene建立索引的步骤中,需要文件系统缓存需要同步到磁盘上.(多个segment->commit文件来维护) 当建立历史数据时,并不要求太高的实时性时,可以减小(默认1s) ...