2015-12-25 5 views
4

Мне нужно создать код, который пузырь сортирует 2D-массив. Трюк здесь в том, что я не могу использовать одномерный помощник массива или переместить элементы в другой массив.Bubble-Sort 2D-массив

Сортировка должна быть в 2D-массиве.

Теперь я построил свою функцию. Но что-то идет не так. Это мой вывод

1  1  2  6  12  32 
49  44  54  55 100 344 

должно быть сделано, и я не могу подумать, как это сделать.

public static int [] [] sortMatrix(int[][]matrix){ 
    for(int x = matrix.length ; x >0 ; x--){ 
     for(int i = matrix[0].length ; i > 0 ; i--){ 
      for(int j = 0 ; j < x ; j++){ 
       for(int t = 0 ;t < i ; t++){ 
        if(t < matrix[0].length - 1 && matrix[j][t] > matrix[j][t+1]){ 
         swap(matrix , j , t, t+1); 
        } 
        else if(t == matrix[0].length - 1 && j != matrix.length -1&& matrix[j][t] > matrix[j+1][0]){ 
         swap1(matrix ,j , t , j + 1); 
        }      
       } 
      }    
     }   
    } 
+2

Выход пара вход ожидалось, будет полезно –

+0

функции '' swap' и swap1' не то же самое? – ThisClark

+0

нет, потому что один своп находится в строках, а другой между столбцами –

ответ

0

Ниже приведен код для сортировки 2D массива, фокус в том, что вы должны думать о массиве 2D в качестве одного из одномерного массива, а затем получить соответствующую строку, смещение пары для индексов.

import java.util.Arrays;  

public class Bubble2DSort { 
    public static void main(String[] args) { 
     System.out.println("Started"); 

     int[][] matrix = {{49,44,54,55,100,344}, {1,1,2,6,12,32}}; 

     sortMatrix(matrix); 

     System.out.println("Printing output "); 

     for(int[] rowArr : matrix) { 
      System.out.println(Arrays.toString(rowArr)); 
     } 
    } 

    private static void sortMatrix(int[][] matrix) { 
     int row = matrix.length; 
     int col = matrix[0].length; 
     int totalCount = row * col; 

     System.out.println("totalCount : " +totalCount); 

     boolean noSwaps = false; 
     for(int i = 0; !noSwaps; i++) { 
      noSwaps = true; 

      for(int j = 1; j < totalCount - i; j++) { 
       int currentRow = (j-1)/col; 
       int currentOffset = (j-1) % col; 
       int nextRow = j/col; 
       int nextOffset = j % col; 

       if(matrix[currentRow][currentOffset] > matrix[nextRow][nextOffset]) { 
        //swapping 
        int temp = matrix[nextRow][nextOffset]; 
        matrix[nextRow][nextOffset] = matrix[currentRow][currentOffset]; 
        matrix[currentRow][currentOffset] = temp; 

        noSwaps = false; 
       } 
      } 
     } 
    } 
} 

Выход:

Started 
totalCount : 12 
Printing output 
[1, 1, 2, 6, 12, 32] 
[44, 49, 54, 55, 100, 344]