2010-03-17 42 views
1

我有一个数组,我想基于数组中的值之一进行排序。我想对它排序的方式是在整个结果数组中均匀分配我要搜索的值。例如 -什么是最简单的方法来交换数组内的项目(ActionScript 2.0)

原始阵列= [A,B,C,d,1,2,3,4]

我想达到 - [A,1,B,2,C,3,d ,4]

我可以计算出何时插入数字(总数/数字号)= 2,因此每个第二项应该是一个数字。

什么是最简单和最有效的方式来做这种类型的排序?

回答

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 
+0

感谢的倍数,但是如果它不是半例如,如果我有一个数组 - [a,b,c,d,e,f,1,2]并且我想[a,b,1,c,d,2,e,f] – undefined

+0

@ undefined查看我的更新 – Amarghosh

+0

非常感谢Amarghosh。 – undefined

相关问题