• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

36번 다소 헷갈려서 질문을 드립니다.

20.03.19 23:50 작성 조회수 101

0

for(j = i-1; j>=0; j--){ // 1

        if(a[j]>tmp) a[j+1] = a[j];

        else break;

}

a[j+1]=tmp; // 2

처음 for문이 시행될 때에 j는 i가 1이기 때문에, 

j는 0으로 초기화가 된 상태에서 for문 안에 있는 일련의 if문을 

거치고 난 뒤에 j--에 의해 j가 -1로 바뀐 상황에서,

이미 j>=0이라는 컨디션에 해당안하기에 

바로 a[0]=tmp;

가 된다고 이해하였습니다. 이게 다른건 몰라도 삽입은 할 때마다 이상하게 상기 ㅈ주석으로  표시한 2코드의 의미가 이해가 안된다기보다는 오히려 확 와닿지를 않는다고 표현하는게 더 적절하네요ㅜㅜㅜ

그렇다면 for문 대신

while(j>=0&&a[j]>tmp){

    if(a[j]>tmp){a[j+1] = a[j];}

    else break;

     j--;

}

a[j+1]=tmp;

}

라고 표현해도 괜찮을까요?

늘 감사드립니다. 

답변 1

답변을 작성해보세요.

1

네. 원래 삽입정렬은 for문으로 할 수 도 있지만 while문으로 작성하면 다음처럼 합니다.

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