在这个选择排序代码中,我从 {8,3,5,9,2} 得到一个数组答案 {2,3,3,5}

In this selection sort code i get from {8,3,5,9,2} an array answer of{2,3,3,5}

我不明白问题出在哪里,我追踪了它并得到了正确的排序,或者如果跟上这些值有问题,有人可以告诉我确切的位置,参考我的代码试用为什么它导致了这个答案。

package sorting;
public class soring {
    public static void selectionsort(int [] a ) {
        for (int i = 0; i < a.length - 1; i++) {
            int minindex = i; 
            int min = a[minindex];
            for(int j=i+1; j<a.length; j++) {
                if(min>a[j]) 
                    min = a[j];
                minindex = j;
            }
            a[minindex]=a[i];
            a[i]=min;
        }
    }

    public static void display (int []a) {
        for (int i =0 ; i<a.length-1 ;i++) {
            System.out.println(a[i]);
        }
    }

    public static void main(String[] args) {
        int [] a = {8,3,5,9,2};
        soring.selectionsort(a);
        soring.display(a);
    }
}

第一个问题:

for (int i =0 ; i<a.length-1 ;i++) {
   System.out.println(a[i]);
}

在您的 display() 方法中,您循环直到小于长度减一,这将不会显示最后一个值。将其更改为 i<a.length

然后在您的 selectionsort() 方法中再次循环,以便永远不会触及最后一个元素。其次,您的 if 语句之一缺少括号。这使得行 minindex = j; 不在 if 块内,因此总是被执行。变化:

if(min>a[j]) 
   min = a[j];
   minindex = j ;

收件人:

if(min>a[j]) {
     min = a[j];
     minindex = j ;
 }