数组的中位数

时间:2016-06-09 13:48:53

标签: arrays sorting delphi median

嘿伙计们我正在使用Delphi 10 Seattle开发。我实际上需要帮助获得阵列的中位数,例如:

 allitems: array[1..500] of Double;

我在一个过程中给出了数组中每个arrayitem的值。所以我得到了一个包含500个双倍数组的数组,并希望从这500个值中获得中位数。首先,我想我必须将数组从低值到高值进行排序,然后获得中位数。那么我怎么能先排序数组并在排序后得到中位数呢?

2 个答案:

答案 0 :(得分:3)

偶数个元素的中位数被定义为中心元素的平均值:

var
  allitems : TArray<double>;

  TArray.Sort<double>(allitems);
  median := (allitems[249] + allitems[250]) / 2; // TArray<double> starts with index 0

答案 1 :(得分:0)

您可以在rosettacode.org上找到的工作算法:

program AveragesMedian;

{$APPTYPE CONSOLE}

uses Generics.Collections, Types;

function Median(aArray: TDoubleDynArray): Double;
var
  lMiddleIndex: Integer;
begin
  TArray.Sort<Double>(aArray);

  lMiddleIndex := Length(aArray) div 2;
  if Odd(Length(aArray)) then
    Result := aArray[lMiddleIndex]
  else
    Result := (aArray[lMiddleIndex - 1] + aArray[lMiddleIndex]) / 2;
end;

begin
  Writeln(Median(TDoubleDynArray.Create(4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2)));
  Writeln(Median(TDoubleDynArray.Create(4.1, 7.2, 1.7, 9.3, 4.4, 3.2)));
end.