题目:让遇到一个二维数组,在二维数组中划分一个区域,分别是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