选择排序算法在某些情况下失败
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);
}
}
}
}
您确定要 exch
在 j
循环内发生吗?
像下面这样改变算法,它工作正常
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);
}
我正在尝试实现选择排序算法。但我看到它在某些情况下失败了。我采用两个不同的数组并得到两个不同的结果。 情况一:整数[] 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);
}
}
}
}
您确定要 exch
在 j
循环内发生吗?
像下面这样改变算法,它工作正常
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);
}