0

我有一个奇怪的问题:这是订购这样一个数字数组的智能/最佳方法

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

对此

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

这个想法是平衡列表,以便为列表的每个元素提供某种优先级。语言可以是php,没关系

4

2 回答 2

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]
于 2012-07-26T13:40:12.410 回答
0

遍历数组中的每个元素并将其复制到第二个数组中,其中每个元素还包含第二个排序键,即序列号。

因此,让我们调用您的输入数组 A。

第一:排序A

然后:遍历 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)

现在为 B 的元素创建一个比较函数,该函数首先在 key2 上排序,然后在 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 并将所有 key1 复制回 A。

于 2012-07-26T13:42:06.623 回答