使用字符串在Java中进行选择排序?

时间:2014-02-27 01:18:31

标签: java sorting selection

我想知道是否有人可以告诉我这个选择排序的逻辑(是的,它用于教育用途,我意识到有一个Arrays.sort()方法)是有缺陷的。

 public static void selectionSortByName() throws IOException {
    String temp;
    for (int i = 0; i <= nameArraySize; i++){

        String smallest = name[i];


        for (int j = 0; j <= nameArraySize; j++){
            if (name[j].compareTo(name[i]) < 0){
                temp = smallest;
                name[j] = temp;
                name[i] = smallest;
            }
        }

    }
  }

我使用compareTo方法在我的行上得到NullPointerException,所以我希望我的一个条件中只有一个逻辑错误。

任何帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:2)

显然,您的nameArraySize不符合数组name的实际长度,或者名称[i]中的某些单元格等于null。

尽管如此,我还没有看到使用冗余变量的重点:

for (int i = 0; i < name.length; i++)

编辑:

啊,现在我看到了,你有<=而不是<

答案 1 :(得分:0)

1)throws IOException根本不是必要的!您的代码不会抛出此检查的异常。

2)将nameArraySize更改为name.length

3)正如我在评论中所说,将<=更改为<

4)AFAIK selectionSort在找到最小的一个之前不会交换。

所以你的代码很好看:

public static void selectionSortByName()  {

    for (int i = 0; i < name.length; i++){

        int smallest =i;
        //invariant is sorted in all n < [i]
        for (int j = i+1; j <= nameArraySize; j++){
            if (name[j].compareTo(name[smallest]) < 0){
                smallest=name[j];
            }
        }

       if(!name[smallest].equals(name[i])){
          swap(name,i,smallest);
       }

    }
  }

  public static void swap(String [] name,int i, int j){                
                String temp = name[j];
                name[j] = name[i];
                name[i] = temp;
  }