请帮助尝试排序数组Java

时间:2013-12-06 05:27:07

标签: java arrays

  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;请帮助和谢谢 有谁知道它为什么这样做以及如何解决它,谢谢

2 个答案:

答案 0 :(得分:2)

你可以这样做

Arrays.sort(x);

请参阅文档here

答案 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以了解有关课程属性的更多信息