您现在的位置:首页 >> 基础算法 >> window基础 >> 内容

Delphi快速查找数组中重复值

时间:2011/9/3 15:36:20 点击:

  核心提示:function BinarySearch(a: TArrayStock; key: string; n: integer): integer;varmyvalue: string;i, iLen,...
function BinarySearch(a: TArrayStock; key: string; n: integer): integer;
var
myvalue: string;
i, iLen, Low, Mid, High: integer;
begin
Low := 0;
High := N - 1;
i := 0;
iLen := Length(key);
while (Low <= High) do
begin
    Mid := Round((Low + High) / 2);
    myvalue := Copy(A[Mid].StockCode, 1, iLen);
    if (myvalue < key) then
      Low := Mid + 1
    else if (myvalue > key) then
      High := Mid - 1
    else begin
      //找到值,并不能保证是最小的那个重复值。
      //因为是排序好的数据,所以还取所有前驱和后继节点之值 ;

      //取所有前驱节点之值
      with FrmExcelQuery do
      begin
        for i := Mid - 1 downto Low do
        begin
          if Copy(A[i].StockCode, 1, iLen) <> myvalue then break;
          lst1.Items.Add(A[i].StockCode+ ' ' + FArrCode[i].SecuAbbr);
        end;
        lst1.Items.Add(A[Mid].StockCode+ ' ' + FArrCode[i].SecuAbbr);

      //取所有后继节点之值;
        for i := Mid + 1 to High do
        begin
          if Copy(A[i].StockCode, 1, iLen) <> myvalue then break;
          lst1.Items.Add(A[i].StockCode+ ' ' + FArrCode[i].SecuAbbr);
        end;
        lst1.Left := edtCode.Left;
        lst1.Top := edtCode.Top + edtCode.Height + 1;
        lst1.ItemIndex := 0;
        lst1.Visible := true;
      end;
      result := Mid;
      exit;
    end;
end;
result := -1;
end;

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2022 版权所有 All Rights Reserved.
  • 沪ICP备05001939号