选择排序算法在某些情况下失败

Selection sort algorithm is failing for some cases

我正在尝试实现选择排序算法。但我看到它在某些情况下失败了。我采用两个不同的数组并得到两个不同的结果。 情况一:整数[] arr= {100,90,6,43,12,1};结果:{1,6,12,43,90,100}

情况2:整数[] arr= {100,90,6,43,12,7};结果:{7,6,12,43,90,100}

下面是我的代码。

public class SelectionSort  {
    
    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w)<0;
    }
    
    private static void exch(Comparable[] a,int i,int j) {
        Comparable swap=a[i];
        a[i]=a[j];
        a[j]=swap;
    }

    public static void sort(Comparable[] a) {

        int N= a.length;
        for(int i=0;i<N;i++) {
            int min=i;
            for(int j=i+1;j<N;j++) {
                if(less(a[j],a[min])) 
                    min=j;
                exch(a,i,min);

            }

        }
        
    }
    
}
   

您确定要 exchj 循环内发生吗?

像下面这样改变算法,它工作正常

int N= a.length;
for(int i=0;i<N-1;i++) {
     int min=i;

     for(int j=i+1;j<N;j++) 
         if(less(a[j],a[min])) 
           min=j;
            
     exch(a,i,min);            
}