2016-06-09 52 views
-1

嗨我与德尔福西雅图10个发展中国家。我实际上需要得到一个数组中值的帮助例如:中位数数组的

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

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

+2

下面是一个不大不小的链接TArray类的方法。它可以帮助你开始上的排序:http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Gene[email protected]_of_T.html –

+1

您可能会发现这个维基百科页面是有用的,太: https://en.wikipedia.org/wiki/Selection_algorithm –

+0

这是什么都没有做的中值。你的问题很简单,“我如何排列数组?” –

回答

3

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

var 
    allitems : TArray<double>; 

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

感谢您的回答!我知道你如何得到中位数,但你如何对数组进行排序,或者你为什么要定义数组?我刚刚在我的问题中定义了我的数组。而TArray.Sort不工作(未声明的标识符在tarray) –

+1

你拥有包括“System.Generics.Collections”在评论你的问题的文档链接指示? – DNR

+0

你大概用Delphi @Liam的一些古老的版本? –

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.