2017-04-16 4 views
0

클래스가 있으며 지금은 삽입 정렬을하고 있습니다. 내 코드는 제대로 작동한다고 생각하지만 교수는 내 루프 중 하나를 삽입하지 말라고했는데 (내 배열의 값을 이동 시킴) "검색 중"해야합니다.삽입 루틴에이 루프를 포함하고 싶지 않은 이유는 무엇입니까?

public static void insertionSort(int array[]) { 
    int n = array.length; 
    for(int i = 0; i < n; i++) { 
     int nextIndex = i; 
     for(int j = 0; j < i; j++) { 
      if(array[nextIndex] < array[j]) { 
       int temp = array[nextIndex]; 
       // ******************************** 
       for(int k = i; k > j; k--) { 
        array[k]=array[k-1]; 
       } 
       // ******************************** 
       array[j]=temp; 
       j = i 
      } 
     } 
    } 
} 

위의 내용에는 어떤 문제가 있습니까?

+0

코드에 메모 : 어디서든 nextIndex를 조작하지 않는 것 같습니다. 대신에'i'를 쓰거나'i''nextIndex라고 이름을 짓는 게 어떨까요? - 루프의 조건을 (다소간) 명시 적으로 false ('j = i')로 설정하는 대신,'break' 문을 사용하여 종료하는 것이 일반적입니다. 그것은 현재 루프를 조기에 빠져 나갑니다. – bleistift2

답변

0

당신의 교수가 의미하는 바는 다음과 같습니다. 현재 배열 [0..i]의 정렬 된 부분을 아래에서 위로보고 새로운 요소를 삽입해야하는 위치를 찾습니다. 이후 배열을 위에서 아래로 이동하여 새 요소를 올바른 위치로 이동합니다.

대신 새 요소를 요소로 옮기고 을 동시에 입력하면 알고리즘을 알고있는 경우 Bubblesort와 비슷한 올바른 위치를 찾습니다. 이렇게하면 for-prof를 철회 할 수 있습니다.