Как найти наименьшее и наибольшее число в массиве? - PullRequest
6 голосов
/ 20 августа 2011

Здравствуйте, как мне найти самое маленькое и самое большое число в delphi?

Предположим, у меня есть 10 различных чисел, хранящихся в массиве:

Как мне найти самое большое и самое маленькое число в моем массиве?

Ответы [ 2 ]

6 голосов
/ 20 августа 2011

Просто переберите массив линейным способом. Сохраните переменную для минимального значения и одну для максимальных значений. Инициализируйте оба к первому значению в массиве. Затем для каждого элемента обновите минимальное или максимальное значение, если этот элемент меньше или превышает минимальное или максимальное значение соответственно.

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.

Обратите внимание, что вы можете в равной степени использовать процедуры MinValue и MaxValue из модуля Math.

4 голосов
/ 20 августа 2011

Перебор массива по сравнению с предыдущими найденными минимальными и максимальными значениями.

Вот фрагмент кода.После вашего разъяснения я отредактировал код для использования 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;

Интересно отметить, что MaxIntValue в Math.pas реализован следующим образом:

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;

Эта реализация, подобно ответу Дэвида, использует первое значение массива в качестве начального значения.Это предполагает, что в массиве есть хотя бы один элемент.Также обратите внимание, что цикл может начинаться с Low (Data) + 1 и сохранять одно ненужное сравнение.Для данных, которые вы описали, со 100 элементами в каждом массиве вы получите улучшение скорости на 1%, в лучшем случае.

Если производительность не имеет значения, то MinIntValue и MaxIntValue будут более краткими.Если вы катите свой собственный, то вы будете перебирать массив только один раз, а не дважды.

...