2017-02-03 35 views
0

我想在C++中計算一個有序數組的數組的中值,我想知道在C++庫中是否有內置函數。在C++庫中是否有一箇中值函數?

+3

*「未知大小的排序數組」*這是什麼意思?你需要*某種方法來告訴數組在哪裏結束,因此你知道它的大小。 –

+0

C++標準庫中沒有中值函數。相關問題:[計算中值存儲在矢量 - C + +?](http://stackoverflow.com/q/2114797/3425536) – emlai

回答

6

沒有必要使用一個函數。要查找與奇數項的列表的中位數,只是做

cout << sortedArray[size/2]; 

其中sortedArray是數組和大小是數組的大小。 對於偶數的數組,你應該做這樣的事情

cout << (sortedArray[size/2] + sortedArray[(size/2) - 1])/2 

換句話說,取N/2元的平均和n/2-1元。

如果您不知道大小,則需要遍歷數組並計算其中有多少個元素。用小數做它是無關緊要的,因爲數組的大小總是一個整數。

+3

如果偶數個元素會怎樣?你想在中間取兩個的平均值。例如2 4 6 8的中位數應該是5. –

+0

你說得對。現在編輯 – Gab

+3

對於第二種情況,我認爲你需要'size/2 - 1'和'size/2'作爲索引。 –

0

如果知道排序數組的大小,則可以計算O(1)中的中值。 當尺寸未知(是鏈表還是什麼?),那麼在經典計算機上計算中位數就需要O(n)。

+0

你應該詳細說明它是如何的O(n)... – Charles

+0

掃描列表left-向右移動指針到當前中位數慢兩倍? – bipll

相關問題