我正在尝试按对对多维数组进行排序。我知道我可以使用Comparator
,但是我想用我的代码来实现。这是我到目前为止尝试过的:
private static void sortArr(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
int maxValColumnIndex0 = arr[i][0];
int maxValColumnIndex1 = arr[i][1];
int maxIndex = i;
for (int column = i + 1; column < arr[i].length; column++) {
if (maxValColumnIndex1 < arr[column][1]){
maxValColumnIndex1 = arr[column][1];
maxValColumnIndex0 = arr[column][0];
maxIndex = column;
}
if (i != maxIndex){
arr[maxIndex][0] = arr[i][0];
arr[maxIndex][1] = arr[i][1];
arr[i][0] = maxValColumnIndex0;
arr[i][1] = maxValColumnIndex1;
}
}
}
}
输入样例:
{{4, 2}, {1, 7}, {4, 5}, {1, 2}, {1, 1}, {4, 1}}
输出应类似于:
{{1, 1}, {1, 2}, {1, 7}, {4, 1}, {4, 2}, {4, 5}}
我已经得到了:
{{1, 7}, {4, 2}, {4, 5}, {1, 2}, {1, 1}, {4, 1}}`
如何按对排序该数组?
一种解决方案可能是按照pairs
您所说的对它们进行排序。这是修改后的冒泡排序,可以与您的示例一起使用:
private static void sortArr(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
for (int column = 0; column < arr.length - 1; column++) {
if(arr[column][0] > arr[column + 1][0]) {
swap(arr, column);
} else if(arr[column][0] == arr[column + 1][0] && arr[column][1] > arr[column + 1][1]) {
swap(arr, column);
}
}
}
}
private static void swap(int[][] arr, int column) {
int[] temp = arr[column];
arr[column] = arr[column + 1];
arr[column + 1] = temp;
}
结果是您想要的: [[1, 1], [1, 2], [1, 7], [4, 1], [4, 2], [4, 5]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句