串聯

2011-05-26 52 views
3

假設排序兩個數組的奇事,我們有兩個數組:串聯

a = [4,3,8,7] 
b = [(1,2),(5,6),(8,6),(9,0)] 

所以我們希望現在的問題是,該陣列的排序。 所以排序的結果應該是a_sorted = [3,4,7,8]。 而且,我們不能對數組b進行排序。 相反,數組b的順序必須根據數組a的排序順序進行更改。

所以,數組b必須是b_sorted = [(5,6),(1,2),(9,0),(8,6)]

即,a_sorted的順序將是a_sorted = [a[1],a[0],a[3],a[2]]。 相應地,b_sorted = [b[1],b[0],b[3],b[2]]

問題很簡單。這種排序有沒有名字? :

回答

2

事實上,這種事情並不少見,雖然今天比以往更少流行。這是標籤分類想法的擴展,其中鍵被排序,然後按順序讀取和寫入相應的記錄。您通常會在以下情況下使用標記排序:

  • 沒有足夠的內存來加載要排序的所有記錄,但可以輕鬆地加載密鑰。

OR

  • 排序期間在內存中移動大量的記錄是非常昂貴的。交換密鑰需要更少的時間。

第二個問題現在不是很常見的問題,因爲您通常會對引用數組進行排序,這意味着只能交換指針 - 每個4個字節或8個字節。

一些API已經內置支持這種類型的並行數組排序。例如,.NET Array類有一個Sort(array, array)方法,其工作方式與您描述的完全相同。

+0

非常感謝Jim!這當然有助於:) – sniper 2011-05-26 20:04:36

3

你只是發現一個數組的排序排列([2,1,4,3]爲a)並將其應用於另一個。很多語言處理得很好。

例如,在Matlab,你可以叫[sortedA, sortedBy] = sort([4 3 8 7]);然後sortedA = a(sortedBy) = [3 4 7 8]sortedBy = [2 1 4 3],因此新的B將被b(sortBy)

2

我不認爲有這樣一個名字。請注意,這樣的「平行陣列」通常被人們所忽視,並且經常被尚未被教過如何正確使用類的人(學生)使用(沒有冒犯意味)。如果兩個數組之間存在關係,則應該將它們放入某種對象中,然後應該對該對象進行排序。

這一切都取決於當然的情況。有人可能會使用無法將(自定義)對象中的相關屬性分組的語言。

1

b的值加上a的鍵值,以便獲得多維數組。然後排序該數組。

0

是的,在PHP中有一個名爲array_multisort的數組排序函數,它可以做你想做的。