二分查找算法(预排序数组的查找) 实现 (DELPHI)

二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较。

相信大家都知道二分查找算法 , 通过重复的比较将数组元素缩小到最小范围,然后找到要查找的值 . 并且最大化优化了CPU时间 , 是一个很不错的算法. 

测试结果 : 我用三个算法 进行了测试 , 但是从输出的结果来看 , 二分查找非常有效和迅速.

实现代码如下 : 

 

program  Bs;

{ $APPTYPE CONSOLE }

{ /* Coded by HYrz 2011-8-25 18:32:25 */ }

uses
  SysUtils ,
  Windows;



var
  arr1 : 
array [ 0 .. 99999999 of  Integer;

function  bsearch(Value : Integer):Integer;
var
  i : Integer;
  c : Integer;
 
begin
  c :
=   0 //  Coded by HYrz  2011 - 8 - 25   18 : 32 : 25
  i :
=  High(arr1);
  
while  arr1[c]  <>  Value  do
    
begin
      i :
= div   2 ;
      
if  i = 0   then  Inc(i);
      
if  arr1[c]  <  Value  then  
       c :
= +  i
       
else
        c :
= -  i
    
end ;
  Result :
=  c;
 
end ;

var
  i : Cardinal;
  t : Cardinal;
  s : Cardinal;
label
 Trys ;
begin
 Randomize;
 s :
=  Random( 99999999 );
  Trys:
 
for  i : = 0   to   99999999   do
  
begin
    arr1[i] :
= i;
  
end ;

  t :
=  GetTickCount;
  i :
=  bsearch(s);
  Writeln(
' Result 3:  '   +  IntToStr(i));
  t :
=  GetTickCount  - t;
  Writeln(
' 执行经过时间 : '   +  IntToStr(t));
  Sleep(
300 );
  
goto  Trys;
  Readln;


end .

 

 

转载于:https://www.cnblogs.com/bsoom/archive/2011/08/26/2153942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值