Как отсортировать двумерный массив методом вставки по строкам одного столбца
У меня есть двумерный массив:
0.0 17.1
1.0 18.3
2.0 5.1
3.0 1.1
4.0 2.3
5.0 6.5
И надо его отсортировать только по второму столбцу и так чтобы числа из первого столбца соответствовали второму. Получилось вот так:
3.0 1.1
4.0 2.3
2.0 5.1
5.0 6.5
0.0 17.1
1.0 18.3
Вот я пытался сортировать:
for(int i=1;i<arr1.length;i++){
for(int j=0;j<arr1[i].length;j++){
if(j%2!=0){
double current = arr1[i][j];
int j1=i;
while(j1>0&&arr1[j1-1][j]>current){
arr1[j1][j]=arr1[j1-1][j];
j1--;}
arr1[j1][j]=current;}
}
}
Но у меня оно не правильно сортирует, у меня числа из первого столбца не соответствуют второму:
0.0 1.1
1.0 2.3
2.0 5.1
3.0 6.5
4.0 17.1
5.0 18.3
Ответы (1 шт):
Автор решения: JavaJunior
→ Ссылка
Задача легко решается с использованием List и Stream API (since Java 8), но если нужно на нативном уровне то:
public static void main(String args[]) throws SocketException {
double[][] arr = {{0.0, 17.1}, {1.0, 18.3}, {2.0, 5.1}, {3.0, 1.1}, {4.0, 2.3}, {5.0, 6.5} };
double[][] resArr = new double[6][2];
int mainPosition = 0;
for (double[] item : arr) {
double arg = item[1];
Integer position = null;
for (int i = 0; i < resArr.length; i++) {
if (arg <= resArr[i][1]){
position = i;
break;
}
}
if (position != null) {
fillRes(item, position, resArr);
} else {
resArr[mainPosition] = item;
}
mainPosition++;
}
}
private static void fillRes(double[] item, int position, double[][] res) {
double[] current = res[position];
res[position] = item;
if (res.length > ++position) {
fillRes(current, position, res);
}
}