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 :=i div 2;
      if i=0 then Inc(i);
      if arr1[c] < Value then 
       c :=c + i
       else
        c :=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.

相关阅读 >>

Delphi 使用windows api(wincrypt)计算文件md5哈希,支持大文件

Delphi 读写文本

Delphi 递归获取文件夹大小

Delphi使用ixmlhttprequest 简单获取网页源代码

Delphi 复杂数据类型

Delphi ord chr byte等转换

Delphi fmx 把内容复制到粘贴板上支持跨平台

Delphi tgauge类的定义在哪个单元中定义的?

Delphi android实例-录音与回放(播放mp3)(xe8+小米2)

Delphi研究之驱动开发篇(六)--利用section与用户模式程序通讯(上)

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...