2013-12-08 3 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

모든 것이 분명하지 fine_ 노력하고 있습니다 _and을. 디버거를 사용하여 코드가 예상했던 것과 다른 위치에서 작동하는지 확인하십시오. –

+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은이 새로운 인수로 초기화됩니다.

는 (I는 또한 최대 값이 음수 인 경우에도 작동하도록 Integer.MIN_VALUEmax의 초기 값을 변경하지만 당신이 가지고 있던 원래의 문제에 관여해서는 안)

+0

그럼 어떻게하는 것이 좋을까요? 현재 max에 더 낮은 범위를 추가하면됩니까? –

+0

내말은 이미 내가하고있는 일이 아닌가? –

+0

@NickGatti 아니야. 거기에는 더 낮은 범위가 없으며 단지 배열입니다. – kviiri

관련 문제