2015-10-16 43 views
1

給定一個無序的數組值(零或正整數),找到中值正值。給定一個無序的整數數組,輸出中值

步驟:

排序陣列把0在開始 排序元素0後進入數字順序

運行兩個for循環(I ++和j + 2),以找到中間元件 打印值

這是正確的嗎?

注: 必須到位做到這一點,沒有拷貝陣列 array.length功能不允許

+0

* i ++和j + 2 *是什麼意思? – Manu

+3

當然通過排序你可以知道數組的長度,因此可以直接到中間的一個 –

+0

兩個循環,一個迭代1和一個迭代2,這樣當j循環結束時,i循環是在陣列的中間。 – Benirving92

回答

3

是的,這是正確的。你只需要小心地計算正確大小的數組中位數。但它不是最好的算法。該算法是O(n log n),受數組排序約束。

另一種選擇是實現一個quickselect中位數爲中位數來實現O(n)複雜度。

+0

只有一句話 - 請注意O(n)是快速選擇的**平均值**複雜度(順便說一句) –

+1

@IvayloStrandjev對於天真的快速選擇,這是真實的。 Quickselect與中位數樞軸轉換是O(n)最壞的情況。 –

+0

有趣 - 我不知道。 –

相關問題