Как отсортировать двумерный массив методом вставки по строкам одного столбца

У меня есть двумерный массив:

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);
       }
  }
→ Ссылка