2012-12-11 10 views
0

나는 다음과 같이 두 가지 방법으로 삽입 정렬의 구현,삽입 정렬 구현 차이

방법 1 본

int S[] = { 20, 25, 10}; 
    int N = S.length; 

    for (int i = 1; i < N; i++) { 
     int j = i - 1; 
     int temp = S[i]; 

     while (j >= 0 && S[j] > temp) { 
     S[j + 1] = S[j]; 
     j--; 
     } 

     S[j + 1] = temp; 
    } 

을하지만 난 할 수 없습니다 두 번째 방법에서 스왑이 while 루프를 벗어나는 이유를 이해해야합니다. while 루프를 사용해야하는 이유가 있습니까?

답변

0

두 버전은 기능이 동일합니다. 후자는 단순히 불필요한 작업을하지 않아도됩니다. 루프가 계속되면 첫 번째 버전에서

다음 할당

numbers[in] = temp; 

는 루프의 다음 반복에 의해 취소 얻을 것이다. 두 번째 버전은이 사실을 기록하고 있으며 루프가 완료 될 때까지 temp을 복원하는 것을 염려하지 않습니다.

0

기본적으로 두 가지 모두 동일하지만 처음에는 [in + 1] 요소에 복사 한 임시 번호를 즉시 작성합니다. 두 번째 경우에는 루프가 완료 될 때까지 기다릴 것입니다. 그래서 약간의 시간을 절약 할 수 있습니다.