public class selectionsorter
{
public selectionsorter(int[] x)
{
theArray=x;
}
public void sort()
{
for(int i=0; i<theArray.length-1;i++)
{
start=i;
findMinPos();
}
}
public void findMinPos()
{
int minpos=start;
for(int i=0;i<theArray.length;i++)
{
if(i>start)
{
if(theArray[i]<theArray[start])
{
start=i;
}
}
}
swap();
}
public void swap()
{
temp=theArray[start];
theArray[start]=theArray[minpos];
theArray[minpos]=temp;
}
private int[] theArray;
private int minpos;
private int start;
private int temp;
}
测试人员档案
public class selectionsortertester
{
public static void main(String[] args)
{
int[] x ={3,7,5,6,9,2};
selectionsorter y=new selectionsorter(x);
y.sort();
for(int i=0; i<x.length;i++)
System.out.print(x[i]+" ");
}
}
我希望它从最低到最高对数组进行排序,它会对第一个数字进行排序,输出为&#34; 2 7 5 6 9 3&#34;请帮助和谢谢 有谁知道它为什么这样做以及如何解决它,谢谢
答案 0 :(得分:2)
答案 1 :(得分:0)
问题在于你将所有变量保留为Class attributes而不是方法中的局部变量,并且所有方法都在改变类变量。
这是不正确的 从班级中删除这些
private int minpos;
private int start;
private int temp;
现在将值作为方法参数传递:
public class SelectionSorter {
public SelectionSorter(int[] x) {
theArray = x;
}
public void sort() {
for (int i = 0; i < theArray.length - 1; i++) {
findMinPos(i);
}
}
public void findMinPos(int start) {
int minpos = start;
for (int i = start + 1; i < theArray.length; i++) {
if (theArray[i] < theArray[start]) {
minpos = i;
}
}
if (minpos != start) {
swap(minpos,start);
}
}
public void swap(int minpos, int start) {
int temp = theArray[minpos];
theArray[minpos] = theArray[start];
theArray[start] = temp;
}
private int[] theArray;
}
请参阅this SO question以了解有关课程属性的更多信息