各位高手,现在做项目遇到一个算法问题,就是已经有了一个数组,data[1..8],现在不知道怎样取得数组里最大的三个数,并记下它在数组中的序号i,小弟在线等。谢谢!!!!!!!!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl: TStringList;
      i: integer;
    Const
      sa: Array[1..8] of integer = (9,2,5,4,0,6,3,8);
    begin
      sl := TStringList.Create;
      for i:=Low(sa) to High(sa) do
        sl.Add(IntToStr(sa[i])+'|'+IntToStr(i));
      sl.Sort;
      if sl.Count>=3 then
      begin
        ShowMessage('最大的数为:'+Copy(sl.Strings[sl.Count-1], 1, Pos('|', sl.Strings[sl.Count-1])-1)+',在数组中的序号为:'+Copy(sl.Strings[sl.Count-1], Pos('|', sl.Strings[sl.Count-1])+1, Length(sl.Strings[sl.Count-1])));
        ShowMessage('第二大的数为:'+Copy(sl.Strings[sl.Count-2], 1, Pos('|', sl.Strings[sl.Count-2])-1)+',在数组中的序号为:'+Copy(sl.Strings[sl.Count-2], Pos('|', sl.Strings[sl.Count-2])+1, Length(sl.Strings[sl.Count-2])));
        ShowMessage('第三大的数为:'+Copy(sl.Strings[sl.Count-3], 1, Pos('|', sl.Strings[sl.Count-3])-1)+',在数组中的序号为:'+Copy(sl.Strings[sl.Count-3], Pos('|', sl.Strings[sl.Count-3])+1, Length(sl.Strings[sl.Count-3])));
      end;
      FreeAndNil(sl);
    end;