二分法查找函数的PASCAL语言程序找错

thesheep 2008-12-17 05:15:59
下面给出的二分查找函数中有一个错误,试用调试方法找出错误并给出排错后的程序?

Function BINARY(Key:integer;List:lists)
Var Y,Z:real;{下标}
begin
if (List[1] <=Key) and (Key <=List[N]) then
begin
Z:=N;
Y:=-N;
while(Y <-1) and (List[trunc(Z)] <>Key) do
begin
Y:=Y/Z;
if Key <= List[trunc(Z+Y)] then Z:=Z+Y;
end; {while}
BINARY :=trunc(Z)*ord(List[trunc(Z)]=Key); {0或1乘以trunc(Z)}
end {if-then}
end BINARY:=0 {不在表中}
end;{ BINARY}
...全文
188 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
BLUE__OCEAN 2008-12-19
  • 打赏
  • 举报
回复
3个变量;nLow,nHigh,nMid
nMid索引的数组值比较,不但的修改nHigh或者是nLow
if Array[nMid] > Array[nLow]:
nLow = nMid + 1
else if Array[nMid] < Array[nHigh]:
nHigh = nMid - 1
else:
nMid is correct
xuedaoli 2008-12-17
  • 打赏
  • 举报
回复

如果不清楚二分如何查找的话,可以看下它的实现原理。简单的说就是每次折半找
采用递归的形式查找。

注意下:二分查找只是适合有序的数组

当然递归函数自然有个终结的条件。可以注意在这个。
当然递归是比较难调的,自己记录慢慢调吧。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧