delphi 查找算法
顺序查找 数组
type
//如果两数相等 返回0 如果第一个小于第二个 返回负数 否则 返回正数
TCompareFunc=function (data1,data2:Pointer):integer;
function CompareLongint(data1,data2:Pointer):integer;
var
L1: Lingint absolute data1;
L2: Lingint absolute data2;
begin
if L1=L2 then
result:=0;
else if L1<L2 then
result:=-1;
else result:=1;
end;
//比较两个以null结尾的字符串
function CompareNullStr(data1,data2:Pointer):integer;
begin
Result:=StrComp(PAnsiChar(data1), PAnsiChar(data2));
end;
procedure Find(aList:TList;aItem:Pointer;aComparer:TCompareFunc):integer;
begin
for i:=0 to pred(aList.Count) do
if aComparer(aList.List^[i],aItem)=0 then begin
Result:=i;
Exit;
end;
Result:=-1;
end;
总结:
1 object pascal规定 循环正常结束的话,循环计数器的值是未定义的,相反,如果过早退出,则是已定义了的。
2 使用aList.List^[i]比用List[i]有效率,因为list[i]实际上是调用一个函数TList.Get,它会检查i的值是否超出范围,否则抛出异常。
3 absolute 的作用 创建两个地址相同的变量。
1 object pascal规定 循环正常结束的话,循环计数器的值是未定义的,相反,如果过早退出,则是已定义了的。
2 使用aList.List^[i]比用List[i]有效率,因为list[i]实际上是调用一个函数TList.Get,它会检查i的值是否超出范围,否则抛出异常。
3 absolute 的作用 创建两个地址相同的变量。
正在写。。。。