1

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

//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
    }

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

4

3 回答 3

0

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

请注意,如果您对字符串进行排序,请不要使用<,请改用该compareTo()方法。

于 2013-09-19T02:46:09.880 回答
0
Arrays.sort(criminal, new Comparator<String[]>() {
   @Override
   public int compare(String[] o1, String[] o2) {
      return o1[0].compareTo(o2[0]);
   }        
});
于 2013-09-19T03:54:21.713 回答
0

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

于 2013-09-19T03:34:19.403 回答