Php 在预先排序的数组中查找给定值的索引

Php 在预先排序的数组中查找给定值的索引,php,algorithm,arrays,binary-tree,Php,Algorithm,Arrays,Binary Tree,今天,我去面试,面试官问我如何在预先排序的数组中找到给定值(数字)的索引,如下所示: $preSortedArr=array(23,32,36,41,45,54); function findIndexByValue($preSortedArray,$value){ //some codes here } 他还说,不允许使用递归 我认为函数应该如下所示: $preSortedArr=array(23,32,36,41,45,54); function

今天,我去面试,面试官问我如何在预先排序的数组中找到给定值(数字)的索引,如下所示:

$preSortedArr=array(23,32,36,41,45,54);
function findIndexByValue($preSortedArray,$value){            
//some codes here       
}
他还说,不允许使用递归

我认为函数应该如下所示:

$preSortedArr=array(23,32,36,41,45,54);
function findIndexByValue($preSortedArray,$value){            
//some codes here       
}
你认为他期望我有什么解决办法


编辑:对不起,我忘了补充一句,他最初让我写伪代码,但我说我不知道。然后我试着用PHP编写它,但我认为他期待一个独立于语言的解决方案。

他可能在寻找

$key = array_search("23", $array);
  • -在数组中搜索给定值,如果成功,则返回相应的键

编辑对于给定的数组,这个问题有些奇怪。除了PHP的本机函数之外,使用其他任何东西都没有意义。另一种方法是使用
while
next
current
,如果您想手动操作的话。这仍然不能解释为什么面试官指出你可能不使用递归。

因为他说数组是预先排序的,所以他可能希望进行二进制搜索。在示例中的小数组上,线性搜索(由于数组已排序,因此可能会进行优化-如果找到较大的值,则会失败退出)当然是非常好的。如果有必要的话,可能会更快。

他可能没有寻找任何具体的答案。他可能想看看你是怎么想的,考虑不同的选择,并在选择你的方法之前解释他们的利弊。最糟糕的情况是o(logn)

我同意Steve的观点。通常我会说使用数组搜索,但他是在寻找思维过程而不是php函数。@John然后面试官或OP用了一个非常糟糕的例子来回答这个问题:)我想这真的取决于这是一个“你知道php吗?”问题,还是一个“你知道算法吗?”问题。如果他只是在寻找
array\u search
,以证明您了解PHP,那么数组被排序的事实是无关紧要的,对递归的禁止也是无关紧要的。但实际上,对于类似于示例的数组,这是正确的答案。也许他准备好了
数组搜索
,并提出了一个后续问题,“如果数组包含一百万个值怎么办?”。二进制搜索可以不递归地实现吗?是的。Niklaus Wirth在标准Pascal[6]中记录了该算法:min:=1;最大值:=N;{数组大小:var A:integer的数组[1..N]重复mid:=(min+max)div 2;如果x>A[mid],则最小值:=mid+1,否则最大值:=mid-1;直到(A[mid]=x)或(min>max);