嘿伙计们我正在使用Delphi 10 Seattle开发。我实际上需要帮助获得阵列的中位数,例如:
allitems: array[1..500] of Double;
我在一个过程中给出了数组中每个arrayitem的值。所以我得到了一个包含500个双倍数组的数组,并希望从这500个值中获得中位数。首先,我想我必须将数组从低值到高值进行排序,然后获得中位数。那么我怎么能先排序数组并在排序后得到中位数呢?
答案 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.