我有一个奇怪的问题:哪种智能/最佳方式可以订购像这样的数字
[1,1,2,2,3,3,4,4]
到这个
[1,2,3,4,1,2,3,4]
我们的想法是平衡列表,以便为列表的每个元素提供一种优先级。 语言可能是php,没那么重要
答案 0 :(得分:1)
我们说[1,1,2,2,2,2,3,3] 取第一组相等的数字并将其放在单独的数组中(垂直)
1 1
类似于第二组相等数字等等
1 1
2 2 2 2
3 3 3
Concat数组以获得结果
[1,2,3][1,2,3][2,3][2]
答案 1 :(得分: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。