2013-05-16 6 views
0

이것은 내 첫 번째 삽입 배열이지만, 아마 정렬되지 않고 어디서 잘못되었는지 잘 모르겠습니다. 어떤 아이디어?삽입 정렬을 수정하는 방법은 무엇입니까?

for (int i=1; i<array.length; i++) { 
      int temp = array[i]; 
      for (int j=i-1; j >=0 && temp < array[j]; j--) { 
       array[j+1] = array[j]; 
       array[j+1] = temp; 
      } 
      ItsATextArea.append(array[i] + "\n"); 
     } 

답변

0
array[j+1] = array[j]; 
array[j+1] = temp; 

나에게 버그를 보인다. 배열에서 동일한 요소를 두 번 사용 하시겠습니까?

1

은 당신이 당신은 거의 바로 그것을했다

array[j+1] = array[j]; 
array[j+1] = temp; // It must be array[j] = temp 
+0

정말인가요? 나는 그 대답에서 보았던 어떤 차이도 만들지 않았다. – user2383438

1

여기에 실수를하고있다 생각합니다. '배열 [j + 1] = 임시;' 라인은 루프 외부에 있어야합니다.

 for (int i=1; i<array.length; i++) { 
      int temp = array[i]; 
      int j = i - 1; 
      for (; j >=0 && temp < array[j]; j--) { 
       array[j+1] = array[j]; 
      }     
      array[j+1] = temp; 
     } 

또한 정렬 된 배열을 인쇄하려는 경우 알고리즘이 완료된 후에 수행하십시오. 삽입 된 요소 "temp"가 "append"라인을 추가 한 위치에서 아직 올바른 위치에 있는지 실제로 알 수 없기 때문입니다. 예를 들어 원래 배열의 마지막 요소가 가장 작은 요소 인 경우 모든 요소를 ​​오른쪽으로 한 자리 이동해야합니다.

관련 문제