【问题标题】:Implement the following method to sort the rows in a twodimensional array实现以下方法对二维数组中的行进行排序
【发布时间】:2013-10-13 08:47:18
【问题描述】:

我整天都在处理这个问题,但不知道下一步该做什么。我让它对行进行排序,但它不会完全对最后一行进行排序。这是我的代码。我知道一旦我或有人得到这个我会觉得很愚蠢。谢谢

    public class Sort2DRow
{
   public static void main (String [] args)
   {
      int[][] matrix = {{3,5,6}, {4,1,2},{9,8,7}};

      System.out.println("Before the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

      System.out.println();//Spacer
      System.out.println("After sort method");
      sortRow(matrix);

   }

   public static int[][] sortRow(int[][] m)
   {
      int temp = 0;
      for(int row = 0; row < m.length ; row++)
      {
         for(int col = 0; col < m.length -1; col++){
            if(m[row][col] > m[row][col + 1])
            {
               temp = m[row][col];
               m[row][col] = m[row][col + 1];
               m[row][col + 1] = temp;
            }
         }
       }

       for(int row = 0; row <m.length; row++){
         for(int col = 0; col <m[row].length; col++){
            System.out.print(m[row][col] + " ");
         }
         System.out.println();
      }

       int[][] result = m;
       return result;
   }

}

【问题讨论】:

  • 您有两个循环在col 上循环。他们没有相同的上限,我怀疑一个只是一个错字。但是,我不知道这是否足以解决问题(因为这个特定的矩阵是方形的,所以错误可能实际上并没有什么不同)。
  • 好的,我认为您只是没有使用有效的排序算法。您正在对每一行进行独立排序,对吗?但是用于对每一行进行排序的算法是一个遍历行的for 循环,并且您无法通过一次遍历数组来对数组进行排序。如果这是交换排序或冒泡排序,则需要准确研究交换排序的工作原理。你需要一个嵌套的 for 循环(row 上的循环不算在内)。

标签: java arrays sorting return 2d


【解决方案1】:

您在正确的轨道上,但问题是您错误地假设 for(int row = 0; row &lt; m.length ; row++) 是您的外部冒泡排序循环。它实际上只是“加载”二维数组中的下一行的循环。所以你需要添加缺失的循环:

for(int col = 0; col < m[row].length; col++){ //This is the real outer bubblesort loop. Change it to m[row].length
    for(int nextCol = col; nextCol < m[row].length; nextCol++) {
        if(m[row][col] > m[row][nextCol])
        {
           temp = //I'll let you figure this out
           m[row][col] = //....
           m[row][nextCol] = //...
        }
     }
}

【讨论】:

  • 感谢大家的帮助!它现在完美运行。我会为需要此方法的任何人发布代码
  • 太棒了,很高兴它成功了。如果您觉得有帮助,请考虑支持和/或接受我的回答。
【解决方案2】:

最终的代码产品

public class Sort2DRowTest
{
   public static void main (String [] args)
   {
      int[][] matrix = {{3,5,6}, {4,1,2},{9,8,7}};

      System.out.println("Before the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

      System.out.println();//Spacer
      System.out.println("Sort method");
      sortRow(matrix);

      System.out.println();//Spacer
      System.out.println("After the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

   }

   public static int[][] sortRow(int[][] m)
   {

      int[][] result = new int[m.length][m[0].length];

    // Copy from m to result
       for (int i = 0; i < m.length; i++)
         for (int j = 0; j < m[0].length; j++)
        result[i][j] = m[i][j];

      int temp = 0;
      for(int row = 0; row < result.length ; row++)
      {
         for(int col = 0; col < result[row].length; col++){ //This is the real outer bubblesort loop. Change it to m[row].length
            for(int nextCol = col; nextCol < result[row].length; nextCol++) {
               if(result[row][col] > result[row][nextCol])
               {
                  temp = result[row][col];
                  result[row][col] = result[row][nextCol];
                  result[row][nextCol] = temp;
               }
            }
            System.out.print(result[row][col] + " ");
         }
         System.out.println();
       }
       //int[][] result = m;
       return result;
   }

}

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多