2012-07-26 129 views
0

我有一個奇怪的問題:這是訂購數量的數組像這樣特定的陣列排序

[1,1,2,2,3,3,4,4] 

這個

[1,2,3,4,1,2,3,4] 

的想法智能/最好的辦法就是平衡列表,以便爲列表中的每個元素提供一種優先級。 語言可能是PHP,這並不重要

+0

這個功課是? – 2012-07-26 13:07:27

+0

這是什麼語言? – 2012-07-26 13:09:23

+0

請添加您使用的語言作爲標籤,以便它很容易回答。 – Narendra 2012-07-26 13:25:38

回答

1

可以說我們有[1,1,2,2,2,2,3,3] 取第一組相同的數字,並把它放在單獨的數組中(垂直方向)

1 1 

類似地對於第二組人數相等的等

1 1 
2 2 2 2 
3 3 3 

陣列的毗連得到結果

[1,2,3][1,2,3][2,3][2] 
+0

這很有趣,並垂直串聯陣列?我能想到的唯一方法就是迭代,或者創建一個矩陣,其長度是數組的最大值,高度是數組的數量。 – 2012-07-26 14:03:59

0

迭代數組中的每個元素並將其複製到第二個數組中,其中每個元素還包含第二個排序鍵,該排序鍵是序號。

所以,讓我們打電話給你的輸入數組A.

第一:排序

然後:遍歷一個和每個元素複製到一個新的數組B,其中每個元件具有第二排序關鍵字,給他們打電話key1和key2。 Key1是來自A的值,key2是序列號。

A: 1,1,2,2,3,3,4,4 
B: (1,1),(1,2),(2,1),(2,2),(3,1),(3,2),(4,1),(4,2) 

現在創建該第一訂單上KEY2 B的元素的比較功能,然後在KEY1:

bool isSmallerThan(x, y) 
{ 
    if (x.key2 < y.key2) return true; 
    if (x.key2 > y.key2) return false; 
    if (x.key1 < y.key1) return true; 
    return false; 
} 

現在排序B使用新的比較函數。

迭代B並將所有key1s複製回A.