在这个选择排序代码中,我从 {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 ;
}
我不明白问题出在哪里,我追踪了它并得到了正确的排序,或者如果跟上这些值有问题,有人可以告诉我确切的位置,参考我的代码试用为什么它导致了这个答案。
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 ;
}