2012-07-26 76 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.