嗨我与德尔福西雅图10个发展中国家。我实际上需要得到一个数组中值的帮助例如:中位数数组的
allitems: array[1..500] of Double;
我给过程中的数组中的每个arrayitem的值。所以我得到了500个双倍数值的数组,并希望从这500个数值中获得中值。首先,我想我必须将数组从低到高排序并在获取中位数后排序。那么我怎么排序数组,然后得到排序后的中位数?
嗨我与德尔福西雅图10个发展中国家。我实际上需要得到一个数组中值的帮助例如:中位数数组的
allitems: array[1..500] of Double;
我给过程中的数组中的每个arrayitem的值。所以我得到了500个双倍数值的数组,并希望从这500个数值中获得中值。首先,我想我必须将数组从低到高排序并在获取中位数后排序。那么我怎么排序数组,然后得到排序后的中位数?
偶数个元素的中值被定义为中心元素的平均值:
var
allitems : TArray<double>;
TArray.Sort<double>(allitems);
median := (allitems[249] + allitems[250])/2; // TArray<double> starts with index 0
感谢您的回答!我知道你如何得到中位数,但你如何对数组进行排序,或者你为什么要定义数组?我刚刚在我的问题中定义了我的数组。而TArray.Sort不工作(未声明的标识符在tarray) –
你拥有包括“System.Generics.Collections”在评论你的问题的文档链接指示? – DNR
你大概用Delphi @Liam的一些古老的版本? –
你可以找到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.
下面是一个不大不小的链接TArray类的方法。它可以帮助你开始上的排序:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Gene[email protected]_of_T.html –
您可能会发现这个维基百科页面是有用的,太: https://en.wikipedia.org/wiki/Selection_algorithm –
这是什么都没有做的中值。你的问题很简单,“我如何排列数组?” –