如何在数组中找到最小和最大的数字?

时间:2011-08-20 02:24:25

标签: arrays delphi search delphi-2007

您好如何在delphi中找到最小和最大的数字?

假设我在数组中存储了10个不同的数字:

如何在阵列中找到最大数量和最小数字?

2 个答案:

答案 0 :(得分:6)

以线性方式循环遍历数组。保留最小值的变量和最大值的变量。初始化为数组中的第一个值。然后,对于每个元素,如果该元素分别小于或大于最小值或最大值,则更新最小值或最大值。

minval := a[0];
maxval := a[0];
for i := 1 to Count-1 do
begin
  if a[i]<minval then
    minval := a[i]
  else if a[i]>maxval then
    maxval := a[i];
end;

显然,此代码假定Count> 0。

请注意,您可以同样使用Math单元中的MinValue和MaxValue例程。

答案 1 :(得分:4)

通过数组迭代比较先前找到的最小值和最大值

这是一段代码段。在您澄清之后,我编辑了使用Int64的代码。

Min := High(Int64);
Max := Low(Int64);
for ThisNumber in MyArray do
begin
  if ThisNumber < Min then
  begin
    Min := ThisNumber;
  end
  if ThisNumber > Max then
  begin
    Max := ThisNumber;
  end;
end;

有趣的是,Math.pas中的MaxIntValue实现为:

function MaxIntValue(const Data: array of Integer): Integer;
var
  I: Integer;
begin
  Result := Data[Low(Data)];
  for I := Low(Data) + 1 to High(Data) do
    if Result < Data[I] then
      Result := Data[I];
end;

此实现与David的答案类似,使用第一个数组值作为初始值。这假设该数组至少有一个元素。另请注意,循环可以从低(数据)+ 1开始,并保存一个不必要的比较。对于您描述的数据,每个阵列中包含100个元素,最多可以提高1%的速度。

如果性能无关紧要,那么MinIntValue和MaxIntValue将更加简洁。如果你自己滚动,那么你只是迭代一次而不是两次。