Java - 对数组进行两次排序?

时间:2012-11-11 01:06:25

标签: java multidimensional-array

我正在开发一个显示邮政编码和门牌号码的程序。我需要在第一列按升序对邮政编码进行排序,然后从左到右对门牌号码进行排序,并使用相同的邮政编码对其进行排序。 例如:

看起来像这样:

  
    

90153 | 9810 6037 8761 1126 9792 4070

         

90361 | 2274 6800 2196 3158 9614 9086

  

我希望它看起来像这样:

  
    

90153 | 1126 4070 6037 8761 9792 9810

         

90361 | 2186 2274 3158 6800 9086 9614

  

我使用以下代码对邮政编码进行排序,但如何对门牌号码进行排序?我是否需要添加一个循环来对此代码中的数字进行排序?如果是的话,在哪里?很抱歉,我无法正确缩进代码。

void DoubleArraySort()
{
    int k,m,Hide;

    boolean DidISwap;

    DidISwap = true;

    while (DidISwap)
    {
        DidISwap = false;
        for ( k = 0; k < Row - 1; k++)
        {
            if ( Numbers[k][0] > Numbers[k+1][0] )
            {
                for ( m = 0; m < Col; m++)
                {
                    Hide = Numbers[k ][m];
                    Numbers[k ][m] = Numbers[k+1][m];
                    Numbers[k+1][m] = Hide ;
                    DidISwap = true;
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

使用像这样的对象ZipCode

public class ZipCode{

    private String zipcode;
    private ArrayList<String> adds

    public ZipCode(String zip){
        zipcode = zip;
        adds = new ArrayList<String>();
    }

    public void addAddress(String address){
        adds.add(address);
        Collections.sort(adds);
    }

}

保持一个ZipCodes数组必须对它们进行排序:

ZipCode[] zips = . . . 
  .
  .
  .
Arrays.sort(zips);

答案 1 :(得分:0)

首先,您是否意识到Java提供了一种更有效的分拣机制?查看Arrays课程。

其次,你必须非常小心你的方法。你在这里做的是将一行中的所有元素与另一行交换。但是你并没有在每一行中做同样的事情。所以你需要一个单独的嵌套循环在当前时间(之前或之后,没有区别),它会检查房屋本身并对它们进行排序:

   for ( k = 0; k < Row; k++)
   {
     do
     {
       DidISwap = false;

       for ( m = 0; m < Col-1; m++)
       {
         if (Numbers[k][m] > Numbers[k][m+1])
         {
           Hide = Numbers[k][m];
           Numbers[k][m] = Numbers[k][m+1];
           Numbers[k][m+1] = Hide;
           DidISwap = true;
         }
       }
     }
     while (DidISwap);
   } 

但是,您的方法效率很低。你为什么不把房子清单放在SortedSet中,然后创建一个SortedMap,从你的邮政编码映射到你的分类房屋?一切都将自动排序,效率更高。

您可以SortedMap实施SortedSet,{{1}}实施TreeMap

答案 2 :(得分:0)

我/我们可以尝试告诉您如何修复(排序)您的代码以执行您想要的操作,但这会适得其反。相反,我将解释做这些事情的“Java方式”,(如果你遵循它)将提高你的工作效率,并使你的代码更易于维护。

  1. 遵循Java样式约定。特别是标识符约定。方法名称和变量名称应始终以小写字符开头。 (并尝试使用类,方法和变量名称来暗示类/方法/变量的含义。)

  2. 学习Java API并使用现有的标准库类和方法,而不是重新发明轮子。例如:

    • ArraysCollections类具有排序数组和集合的标准方法。

    • 有一些集合类型可以实现集合和映射等,可以处理“枯燥”的事情,比如按顺序保存元素。

  3. 如果您有复杂的数据结构,请使用现有的集合类型和自定义类构建它。不要试图将其表示为数字数组。成功的Java程序员使用高级设计和实现抽象。你的方法就像试图用手工制作的砖块建造一个多层停车场。


  4. 我的建议是获得一本关于面向对象编程的教科书(用Java编写),并以正确的方式设计和编写Java程序。现在投入努力将提高你的工作效率。