我有ID排序根據
a1 = [1, 2, 3, 4, 5]
的陣列,並且我有目的的另一陣列IDS按隨機順序另一個陣列的元件的陣列
a2 = [(obj_with_id_5), (obj_with_id_2), (obj_with_id_1), (obj_with_id_3), (obj_with_id_4)]
現在我需要排序a2根據a1中的id的順序。所以A2現在應該成爲:
[(obj_with_id_1), (id_2), (id_3), (id_4), (id_5)]
A1可能是[3,2,5,4,1]或以任何順序,但A2應該對應於A1 ID的順序。
我這樣做:
a1.each_with_index do |id, idx|
found_idx = a1.find_index { |c| c.id == id }
replace_elem = a2[found_idx]
a2[found_idx] = a2[idx]
a2[idx] = replace_elem
end
但是,這仍然可能會遇到一個爲O(n^2)時間,如果A2的元素的順序完全顛倒A1的。有人可以告訴我排序A2最有效的方法嗎?
我相信這將是爲O(n^2)。實際的排序是O(n),但是準備步驟會使它n^2 – Jato 2012-08-15 05:34:23
我不同意,建立哈希表需要O(n),看這裏http://en.wikipedia.org/wiki/ Hash_table – megas 2012-08-15 05:49:11
是的,構建哈希表是O(n)時間。排序是O(n)時間。所以你有2xO(n)...嗯...那會少於n^2。我立場糾正。接得好! – Jato 2012-08-15 13:41:28