2016-06-09 54 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.