我有一个数组,我想根据数组中其中一个值的值进行排序。我想对它进行排序的方法是在整个结果数组中均匀分布我正在搜索的值。例如 -
原始数组= [a,b,c,d,1,2,3,4]
我想达到 - [a,1,b,2,c,3,d,4]
我可以计算出何时插入数字(总项数/数字数)= 2所以每第2项应该是一个数字。
进行此类排序的最简单,最有效的方法是什么?
答案 0 :(得分:3)
var a = [a,b,c,d,1,2,3,4];
var half = a.length / 2;
var c = [];
for(var i = 0; i < half; i++)
{
c.push(a[i]);
c.push(a[half + i]);
}
a = c;
一般解决方案:
将r
设置为适当的值,并确保数组长度对应于该值。例如,如果r
为2,则字母数与位数之比为2:1
,因此数组的长度len
应为3的倍数。
function mix(a:Array, r:Number):void
{
var len1 = a.length * r / (r + 1);
var len2 = a.length - len1;
var c = [];
for(var i = 0; i < len2; i++)
{
for(var j = 0; j < r; j++)
c.push(a[i * r + j]);
c.push(a[len1 + i]);
}
trace(c.join());
}
var r = 2; //two letters per one digit
//8 letters and 4 digits
var a = ['a','b','c','d','e','f','g','h','1','2','3','4'];
mix(a, r) // a,b,1,c,d,2,e,f,3,g,h,4
r = 3; //three letters per one digit
//9 letters and 3 digits
a = ['a','b','c','d','e','f','g','h','i','1','2','3'];
mix(a, r); // a,b,c,1,d,e,f,2,g,h,i,3