我试图通过成对排序多维数组。我知道我可以使用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}}`
如何按对数组进行排序?
答案 0 :(得分:0)
解决方案可能是按照您的说法将它们排序为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]]