您好如何在delphi中找到最小和最大的数字?
假设我在数组中存储了10个不同的数字:
如何在阵列中找到最大数量和最小数字?
答案 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将更加简洁。如果你自己滚动,那么你只是迭代一次而不是两次。