代码没有正确排序

时间:2013-12-08 18:23:31

标签: java sorting

所以,我有我的代码,但我的数字没有排序。有什么我想念的吗?

我的排序代码,没有其他方法,如打印等:

 public static int[] swapElement (int [] x, int index1, int index2) {
        int t = x[index1];
        x[index1] = x[index2];
        x[index2] = t; 
        return x;
    }
      public static int[] sortArray (int [] x) {
        int index = 0;
        int i=0;

        int[] toSort= new int[x.length];
       for(int m=0;m<x.length;m++){
        index = indexOfMaxInRange(x);
        toSort=swapElement(x,i,index);
        i++;
       }

      return toSort;
    }
      public static int indexOfMaxInRange (int[] x) {
        int max = 0;
        int i=0;
        int maxLocation = 0;
        while(i < x.length) {
            if (x[i] > max) {
                max = x[i];
                maxLocation= i;

            }
             i++;
        }       

1 个答案:

答案 0 :(得分:1)

for(int m=0;m<x.length;m++){
    index = indexOfMaxInRange(x);
    toSort=swapElement(x,i,index);
    i++;
}

在这里,您首先将最大元素放在第一个,然后是第二个,然后是第三个等索引。问题在于,不是找到第二个最大元素到第二个索引,而第三个最大元素用于第三个索引,依此类推,你只需要交换最大元素。

要解决此问题,我建议您通过指定要搜索的范围而不是让整个数组查看,使您的方法indexOfMaxInRange符合其名称。

编辑:根据请求,以下是为方法添加下限的方法:

public static int indexOfMaxInRange (int[] x, int firstIndex) {
    int max = Integer.MIN_VALUE;
    int i=firstIndex; //note! initialize to min instead of 0
    int maxLocation = firstIndex;
    while(i < x.length) {
        if (x[i] > max) {
            max = x[i];
            maxLocation= i;

        }
        i++;
    }
    return maxLocation;
}

注意更改:添加的参数(搜索的第一个索引 - 0将意味着像以前一样搜索整个数组)并且i被初始化为这个新参数。

(我还将max的初始值更改为Integer.MIN_VALUE,以使其工作正常,即使最大值为负数,但这不应与您原来的问题有关)