【问题标题】:Alphabetical selection sort of a 2D array二维数组的按字母顺序选择排序
【发布时间】:2013-09-19 02:40:36
【问题描述】:

我的任务要求我将输入的数据存储在二维数组中,并使用选择排序按字母顺序对犯罪进行排序。如何更改以下选择排序:

//selection sort
    for(i = 0; i < criminal.length; i++){
        smallest = i;

        for(j = i; j < criminal.length; j++){
            //compare smallest to current position
            if(criminal[j] < criminal[smallest]){
                smallest = j;
            }

         //swap smallest with position in the array
         temp = criminal[i];
         criminal[i] = criminal[smallest];
         age[smallest] = temp;

        }


    }           
    //output 
    for(i = 0; i < criminal.length; i++){
        System.out.println(criminal[i]);
    }

这样它就可以容纳一个看起来像这样的二维数组:

//loop to request to fill array
    for (i = 0; i < criminals.length ; i++) {               
            System.out.print("Enter first and last name of criminal: ");
            criminals[i][0] = br.readLine(); //Criminal Name

            System.out.print("Enter crime committed: ");
            criminals[i][1] = br.readLine(); //Criminal Crime

            System.out.print("Enter year of conviction: ");
            criminals[i][2] = br.readLine(); //Year of conviction
    }

就是这样。任何帮助都会很棒!我真的需要尽快完成这件事。提前致谢。 :)

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    取决于您要排序的内容。如果你想根据罪犯的名字对罪犯进行排序,那么每次在选择排序算法中出现criminal[X] 之类的内容时,将其替换为criminal[X][0]。同样,如果您想根据定罪年份进行排序,请将 criminal[X] 替换为 criminal[X][2] 等。

    请注意,如果您对字符串进行排序,请不要使用&lt;,而是使用compareTo() 方法。

    【讨论】:

    • 但是如果我想按字母顺序排序,我不是必须使用 compareTo 吗?
    • 哈哈我笨。是的,compareTo 就是我的意思。
    • 没关系。 :) 我想这就是你的意思: if(criminals[j][1].compareTo(criminals[smallest][1]))?但它不起作用,因为它没有给出布尔值。
    • compareTo() 返回一个整数。如果两个“事物”X 和 Y 相等,则 X.compareTo(Y) == 0。如果 X
    【解决方案2】:

    您正在对名称进行排序,并且它们恰好有两个与之关联的其他字段。当你的排序通过交换索引来移动东西时,它应该交换犯罪分子[][]中条目(行)的适当索引。

    【讨论】:

    • 它与您已经拥有的并没有太大的不同。您需要做的就是阅读二维数组犯罪[][] 是什么,您就可以开始了。
    【解决方案3】:
    Arrays.sort(criminal, new Comparator<String[]>() {
       @Override
       public int compare(String[] o1, String[] o2) {
          return o1[0].compareTo(o2[0]);
       }        
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      相关资源
      最近更新 更多