二分查找用DELPHI怎么实现,下面程序有错不。。。 ( 积分: 50 )

  • 主题发起人 主题发起人 xiaoshun
  • 开始时间 开始时间
X

xiaoshun

Unregistered / Unconfirmed
GUEST, unregistred user!
function BinarySearch(A:string
low:integer
high:integer
k:string ):integer;
var i:integer;
begin
if high<> 0 then
begin
while (low<=high) do
begin
i := high div 2;
if A= k then
result:= i
else if A > k then
high:=i-1
else if A < k then
low:=low+1
end;

end
else
showmessage('请输入数据后再查找');
end;
 
function BinarySearch(A:string
low:integer
high:integer
k:string ):integer;
var i:integer;
begin
if high<> 0 then
begin
while (low<=high) do
begin
i := high div 2;
if A= k then
result:= i
else if A > k then
high:=i-1
else if A < k then
low:=low+1
end;

end
else
showmessage('请输入数据后再查找');
end;
 
function BinarySearch(A:string
low:integer
high:integer
k:string ):integer;
var i:integer;
begin
Result :=-1;
if high<> 0 then
begin
while (low<=high) do
begin
i := high div 2
//这里错了,应该为 i :=(high+low) div 2
if A= k then
begin
result:= i
//这是修改过的
Break

end
else if A > k then
high:=i-1
else if A < k then
low:=low+1
end

end
else
showmessage('请输入数据后再查找');
end;
 
这个程序我也没测试过,我想应该可以了,你自己再试。
 
折半查找:
function BinarySearch(A: Array of integer
low:integer
high:integer
k:integer ):integer
//假设A是升序排列的
var
iLow,iHigh,iMid: integer
// 折半的下界,上界,和折半的中间值
begin
iLow:= low;
iHigh:= high;
iMid:= (iLow + iHigh) div 2;
while (iLow <> iHigh) do
begin
if A[iMid] > K then
iHigh:= iMid;
if A[iMid] < K then
iLow:= iMid;
if A[iMid] = K then
begin
Result:= iMid;
Break;
end;
iMid:= (iLow + iHigh) div 2
// 保证循环用
end;
if (iLow = iHigh) then
result:= -1
// 返回-1表明没有找到
end;
 
大哥QQ有没有啊
急,还有事情请教
加36790941
 
function BinarySearch(A:string
low:integer
high:integer
k:string ):integer
//假设A是降序排列的
var i:integer;
begin
Result :=-1;
if high<> 0 then
begin
if A[high]= k then
begin
Result := high;
Exit

end;
if A[low]= k then
begin
Result :=low;
Exit

end;
while (low<=high) do
begin
i :=(high+low) div 2
if A= k then
begin
result:= i
//这是修改过的
Break

end
else if A > k then
high:=i-1
else if A < k then
low:=low+1
end

end
else
showmessage('请输入数据后再查找');
end;
 
TstringList.Find方法是用二半查找法的,你可以参考一下
 
后退
顶部