강의

멘토링

커뮤니티

Inflearn Community Q&A

kjr51891008's profile image
kjr51891008

asked

Introduction to Algorithm Problem Solving for IT Employment (with C/C++): Coding Test Preparation

36. Insertion sort

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

Written on

·

157

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;

}

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

늘 감사드립니다. 

C++코테 준비 같이 해요!

Answer 1

1

codingcamp님의 프로필 이미지
codingcamp
Instructor

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

while(j>=0 && a[j]>tmp){
	a[j+1]=a[j];
	j--;
}
a[j+1]=tmp
kjr51891008's profile image
kjr51891008

asked

Ask a question