二维数组中,依据某列的数值进行排序

157 阅读1分钟

题目:让遇到一个二维数组,在二维数组中划分一个区域,分别是R1-R2行,C1-C2列的区域内。依据S列数值大小进行升序或降序排列。依据a为0升序,a为1降序。

例:a=[]

arr= 1 2 3 4 
     5 6 7 8
     9 10 11 12
     13 14 15 16
r1=1,r2=2,c1=1,c2=2,s=2,a=1
arr=1 2 3 4
    5 10 11 8    9  6 7 12
    13 14 15 16

function test(aim, r1, r2, c1, c2, s, a){
    for(let i = r1; i <= r2; i++){
        if(a === 0){
            for(let j = i+1; j <= r2; j++){
                if(aim[i][s] > aim[j][s]){
                    for(let k = c1; k <= c2; k++){
                        swap(aim,i,j,k)
                    }
                }
            }
        }else if(a === 1){
            for(let j = i+1; j <= r2; j++){
                if(aim[i][s] < aim[j][s]){
                    for(let k = c1; k <= c2; k++){
                        swap(aim,i,j,k)
                    }
                }
            }
        }
    }
    return aim
}
function swap(arr, i, j, s){
    let temp = arr[i][s]
    arr[i][s] = arr[j][s]
    arr[j][s] = temp
    return arr
}
for(let i = 0; i < aim.length; i++){
    console.log(aim[i].join(' '))
}
console.log('')
aim = test(aim, 1, 3, 1, 3, 1, 1)
for(let i = 0; i < aim.length; i++){
    console.log(aim[i].join(' '))
}

输出结果为:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

1 2 3 4
5 14 15 16
9 10 11 12
13 6 7 8