2013-12-08 58 views
0

所以,我有我的代码,但我的号码没有排序。有什么我失踪?代码不正确排序

我排序的代码,没有其他的方法,如印刷和例如:

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++; 
     }  
+3

_and一切工作fine_显然不是。使用调试器来找出代码的行为与您期望的不同。 –

+0

'swapElement'可以是无效的,因为传递的'toSort'参数将被改变。 –

回答

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使即使最大值为负值它的工作,但不应该关心你有原始的问题)

+0

那么你如何建议我这样做呢?只需将其较低的范围添加到当前的最大值? –

+0

我的意思是,我不是在做什么? –

+0

@NickGatti不,它不是。你没有更低的范围,只有阵列。 – kviiri