数组排序(中间大两边小)

    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);
    }
    }
 

你可能感兴趣的:(数组排序(中间大两边小))