2017-06-26 54 views
0

假設您想對不重複的正整數數組進行排序,將其值作爲索引進行排序是一個好主意嗎?例如:將算法值作爲位置排序

鑑於未排序陣列等

[5,3,4,1] 

創建具有大小與其他陣列最大值(6)在新的數組。

[null, null, null, null, null, null] 

添加元素。與第一元件(5)進入第五位置:

[null, null, null, null, null, 5] 

與第二元件:

[null, null, null, 3, null, 5] 

排序其它元件...

[null, 1, null, 3, 4, 5] 

刪除空值:

[1, 3, 4, 5] 
+1

究竟是什麼問題?你描述的過程似乎是[桶排序](https://en.wikipedia.org/wiki/Bucket_sort)。 – Codor

+0

那麼*所有*排序將按其元素「值」對數組進行排序。此外,詢問「這是一個好主意」是讓你的問題變得寬泛或主觀,都是解決問題的理由。 –

+0

Pigeonhole排序 –

回答

1

這不是個好主意!排序這兩個數字[0,9223372036854775807]將超出你的記憶。

1

有些情況下,再次,這可能是不理想的:

  • 重複值:假設你有兩個5,你只會有一個結束。無論你是想這樣的事情發生是你

  • 大範圍:大量的內存空間,如果你有最小的和最大的價值差別很大浪費,並在兩者之間並不多。例如如果數組中只有1和999,則需要一個長度爲1000的數組來排序兩個值。您可能沒有足夠的內存在更普遍的情況下,要做到這一點,建設+填充一個大的陣列一樣,這是費時

  • 刪除NULL值:這種從先前的點以下上 - 每個陣列刪除是O(n),所以刪除多值可以是非常昂貴

我敢肯定還有其他的,這些是我能想到的人。

+0

從數組中刪除多個空值不會比刪除一個值更昂貴。你只需要在數組中進行一次掃描。 – Henry

0

如果整數的大小小於pow(10,6)。但是如果超過這個值,它會給你分段錯誤(因爲pow(10,6)是數組的最大值)。所以陣列的大小是很重要的因素。我們不會將這種方法用於大尺寸數組。我們通常應該避免這種方法。