function test(){
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = [];//最终输出结果
result.push(arr[0]);//排序之后直接将第1、2位的数据放入最终结果之中
result.push(arr[1]);
var l = 1;//定义该从何处插入数组值
var lNum = parseInt(arr[0]),rNum = parseInt(arr[1]);//最终结果的左右侧的数值之和
var boor = false;//这个定义是用于对循环进行限制,从第三个数据开始,每两个进行比对,第一个比对后,第二个就不用再进行循环了!
for (var i = 2 ; i < arr.length; i++) {//两翼数据平衡第一次
if((arr.length)%2 == 0){//判断输入的数组长度是否为偶数
if(boor){
boor = false;
continue;
}else{
boor = true;
result.splice(l,0,arr[i+1]);
l ++;
result.splice(l,0,arr[i]);
}
}else{
if(i == arr.length-1){
result.splice(l,0,arr[i]);
}else if(boor){
boor = false;
continue;
}else{
boor = true;
result.splice(l,0,arr[i+1]);
l ++;
result.splice(l,0,arr[i]);
}
}
}
//两翼数据平衡处理第二次
var lIndex = 0;//初始result左部索引号
var rIndex = result.length-1;//初始result右部索引号
var lSum = 0,rSum = 0;//存放左右两端数据的和
for (var i = 0; i < Math.floor(result.length/2);i++) {//需要求和的次数为数组长度的一半,这里需要注意当数组长度为偶数时,默认左边少进行一次求和,保证最大数在中间部分
if((result.length)%2 == 0){
rSum += parseInt(result[rIndex]);
rIndex --;
if(i < (result.length/2)-1){
lSum += parseInt(result[lIndex]);
lIndex ++;
}
}else{
lSum += parseInt(result[lIndex]);
lIndex ++;
rSum += parseInt(result[rIndex]);
rIndex --;
}
}
if(lSum < rSum-3){//两翼数据平衡处理第三次,根据第二次结果来判断执行,减去3的目的是限制两边之差,若小于3则不用进行比对,直接输出便可
var gap = Math.abs(lSum - rSum)-3;//数值差的绝对值
for (var i = gap; i > 0; i--) {
for (var j = Math.floor((result.length/2)) ; j < result.length; j++ ) {
if(i == parseInt(result[j])){
var a = result.slice(j,j+1);
result.splice(j,1);
if(j == result.length){
result.splice(1,0,a);
}else{
result.splice(result.length-j,0,a);
}
alert(result);
return;//满足条件,不用再进行数据交换了,结束整个循环;
}
}
}
}else{
alert(result);
}
}