数组的中位数
Median of an Array
大家好,我正在 Delphi 10 Seattle 开发。我实际上需要帮助来获取数组的中位数,例如:
allitems: array[1..500] of Double;
我在程序中给出了数组中每个数组项的值。所以我得到了一个包含 500 个双精度值的数组,我想从这 500 个值中得到中位数。首先,我想我必须对数组从低值到高值进行排序,然后得到中位数。那么我怎样才能先对数组进行排序并在排序后得到中位数呢?
偶数个元素的中位数定义为中心元素的平均值:
var
allitems : TArray<double>;
TArray.Sort<double>(allitems);
median := (allitems[249] + allitems[250]) / 2; // TArray<double> starts with index 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.
大家好,我正在 Delphi 10 Seattle 开发。我实际上需要帮助来获取数组的中位数,例如:
allitems: array[1..500] of Double;
我在程序中给出了数组中每个数组项的值。所以我得到了一个包含 500 个双精度值的数组,我想从这 500 个值中得到中位数。首先,我想我必须对数组从低值到高值进行排序,然后得到中位数。那么我怎样才能先对数组进行排序并在排序后得到中位数呢?
偶数个元素的中位数定义为中心元素的平均值:
var
allitems : TArray<double>;
TArray.Sort<double>(allitems);
median := (allitems[249] + allitems[250]) / 2; // TArray<double> starts with index 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.