我有一个奇怪的问题:这是订购这样一个数字数组的智能/最佳方法
[1,1,2,2,3,3,4,4]
对此
[1,2,3,4,1,2,3,4]
这个想法是平衡列表,以便为列表的每个元素提供某种优先级。语言可以是php,没关系
假设我们有 [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]
遍历数组中的每个元素并将其复制到第二个数组中,其中每个元素还包含第二个排序键,即序列号。
因此,让我们调用您的输入数组 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。