## 《Delphi 算法与数据结构》学习与感悟[1]: 通过 "顺序查找" 与 "二分查找" 说明算法的重要性 转

涂孟超

``````unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{\$R *.dfm}

{顺序查找函数}
function SeqSearch(List: TStringList; const str: string): Integer;
var
i: Integer;
begin
for i := 0 to List.Count - 1 do
if CompareText(List[i], str) = 0 then begin Result := i; Exit; end;
Result := -1;
end;

{二分查找函数; 二分查找只能针对有序列表}
function BinarySearch(List: TStringList; const str: string): Integer;
var
L,R,M: Integer;
CompareResult: Integer;
begin
Result := -1;
L := 0;
R := List.Count - 1;

while L <= R do
begin
M := (L + R) div 2;
CompareResult := CompareText(List[M], str);
if CompareResult < 0 then L := M + 1 else
if CompareResult > 0 then R := M - 1 else
begin
Result := M;
Exit;
end;
end;
end;

{对比测试}
procedure TForm1.Button1Click(Sender: TObject);
var
TestList: TStringList;
i: Integer;
n1,n2: Int64;
Count1,Count2: Integer;
s: string;
const
num = 1000000; {准备测试百万个数据}
begin
TestList := TStringList.Create;
for i := 0 to num-1 do TestList.Add(IntToHex(i,8)); {准备有序的测试值列表}

Memo1.Clear;
Count1 := 0;
Count2 := 0;

{搞 10 实验}
for i := 0 to 9 do
begin
{产生范围内的随机字串}
Randomize;
s := IntToHex(Random(num),8);

{顺序查找}
QueryPerformanceCounter(n1);
SeqSearch(TestList, s);
QueryPerformanceCounter(n2);
Count1 := Count1 + (n2-n1);

{二分查找}
QueryPerformanceCounter(n1);
BinarySearch(TestList, s);
QueryPerformanceCounter(n2);
Memo1.Lines[i] := Memo1.Lines[i] + IntToStr(n2-n1);
Count2 := Count2 + (n2-n1);
end;

Memo1.Lines.Add(IntToStr(Count1 div 10)+ #9 + IntToStr(Count2 div 10));
Memo1.Lines.Insert(0, '顺序'#9'二分');

TestList.Free;
end;

end.

``````

### 涂孟超

Java实现的二分查幸运飞艇平台出租找算法[递归]

oskksk
2018/07/10
0
0

hardyyao
2018/10/05
0
0

dqcfkyqdxym3f8rb0
2017/11/24
0
0
2018年6月前端面试经历(中)

2018/07/05
0
0

1、定义 分块查找(Blocking Search)又称索引顺序查找。它是一种性能介于顺序查找和二分查找之间的查找方法。 2、基本思想 分块查找的基本思想是： （1）首先查找索引表 索引表是有序表，可采...

2016/04/28
47
1

OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单（2019）请戳（这里） 【今日歌曲】 @-冰冰棒- ：#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌，请使劲儿戳（这里） 现在...

36分钟前
11
4
test

carmen-ly

1
0
Android webview热门组件agentweb:4.0.2无法自适应的问题

Android webview热门组件agentweb:4.0.2无法自适应的问题 //设置自适应屏幕，两者合用mAgentWeb.getAgentWebSettings().getWebSettings().setUseWideViewPort(true); //将图片调整到适合w...

Gemini-Lin

5
0

5
0
js中的对象创建的模式以及继承模式

3
0