特殊的数组排序

时间:2012-07-26 13:06:04

标签: php algorithm sorting

我有一个奇怪的问题:哪种智能/最佳方式可以订购像这样的数字

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

到这个

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

我们的想法是平衡列表,以便为列表的每个元素提供一种优先级。 语言可能是php,没那么重要

2 个答案:

答案 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。