使用插入排序对二维数组进行排序
Sort 2D array using insertion sort
我想使用插入排序按特定列对二维整数数组进行排序。以下代码适用于一维数组。
private static void InsertionSort(int[] a, int n) {
int key, j;
for (int i = 1; i < n; i++){
key = a[i];
j = i - 1;
while ((j >= 0) && (a[j] > key)){
a[j+1] = a[j];
j = j - 1;
}
a[j+1] = key;
}
}
对于二维数组,我为数组的排序依据列指定了一个整数 c。例如,如果我按第一列排序,
{4, 1, 3},
{6, 0, 2},
{5, 9, 8}
变成
{4, 1, 3},
{5, 9, 8},
{6, 0, 2}
这是我到目前为止按指定列对二维数组进行排序的结果
private static void InsertionSort(int[][] a, int n, int c) {
in key, j;
for (int i = 1; i < n; i++){
key = a[i][c];
j = i - 1;
while ((j >= 0) && (a[j][c] > key)){
a[j+1][c] = a[j][c];
j = j - 1;
}
a[j+1][c] = key;
}
}
但是按第一列排序的结果是
{4, 1, 3}
{5, 0, 2}
{6, 9, 8}
它对第一列的元素进行排序,而不将它们与各自的行放在一起。我该如何解决这个问题?
您需要交换数据行,而不仅仅是数据元素。
private static void sort(int[][] a, int n, int c) {
int key, j;
for (int i = 1; i < n; i++){
key = a[i][c];
int[] keyRow = a[i];
j = i - 1;
while ((j >= 0) && (a[j][c] > key)){
//a[j+1][c] = a[j][c];
a[j+1] = a[j];
j = j - 1;
}
//a[j+1][c] = key;
a[j+1] = keyRow;
}
}
从Java8开始,一行就可以了。
Arrays.sort(data, (a, b) -> a[COL] - b[COL]);
其中 COL 是要排序的列。
我想使用插入排序按特定列对二维整数数组进行排序。以下代码适用于一维数组。
private static void InsertionSort(int[] a, int n) {
int key, j;
for (int i = 1; i < n; i++){
key = a[i];
j = i - 1;
while ((j >= 0) && (a[j] > key)){
a[j+1] = a[j];
j = j - 1;
}
a[j+1] = key;
}
}
对于二维数组,我为数组的排序依据列指定了一个整数 c。例如,如果我按第一列排序,
{4, 1, 3},
{6, 0, 2},
{5, 9, 8}
变成
{4, 1, 3},
{5, 9, 8},
{6, 0, 2}
这是我到目前为止按指定列对二维数组进行排序的结果
private static void InsertionSort(int[][] a, int n, int c) {
in key, j;
for (int i = 1; i < n; i++){
key = a[i][c];
j = i - 1;
while ((j >= 0) && (a[j][c] > key)){
a[j+1][c] = a[j][c];
j = j - 1;
}
a[j+1][c] = key;
}
}
但是按第一列排序的结果是
{4, 1, 3}
{5, 0, 2}
{6, 9, 8}
它对第一列的元素进行排序,而不将它们与各自的行放在一起。我该如何解决这个问题?
您需要交换数据行,而不仅仅是数据元素。
private static void sort(int[][] a, int n, int c) {
int key, j;
for (int i = 1; i < n; i++){
key = a[i][c];
int[] keyRow = a[i];
j = i - 1;
while ((j >= 0) && (a[j][c] > key)){
//a[j+1][c] = a[j][c];
a[j+1] = a[j];
j = j - 1;
}
//a[j+1][c] = key;
a[j+1] = keyRow;
}
}
从Java8开始,一行就可以了。
Arrays.sort(data, (a, b) -> a[COL] - b[COL]);
其中 COL 是要排序的列。