아는개발자
2021. 11. 23. 23:15
Q9. 단순 삽입 정렬에서 배열의 첫 요소부터 데이터를 저장하지 않고 a[1]부터 데이터를 저장하면 a[0]을 보초로 하여 삽입을 마치는 조건을 줄일 수 있습니다. 이 아이디어를 적용한 단순 삽입 정렬 함수를 수정하세요.
내 답변:
void insertion(int a[], int n) {
int j;
for (int i = 1; i < n; i++) {
int tmp = a[i];
a[0] = a[i];
for (j = i; a[j - 1] > tmp; j--)
a[j] = a[j - 1];
if (j!=0) a[j] = tmp;
}
}
정답:
int tmp=a[0]=a[i]; 대입을 한 줄로 깔끔하게 할 수 있단 걸 계속 잊는다. 기억하자.
그리고 그냥 if(j)라고 썼네. 더 짧게 코드를 쓸 수 있어서 좋다. 이해하기 어려울 것 같으면 옆에 주석을 달아놔도 되니까.
//void insertion(int a[], int n)
//{
// int i, j;
//
// for (i = 1; i < n; i++) {
// int tmp = a[0] = a[i];
// for (j = i; a[j - 1] > tmp; j--)
// a[j] = a[j - 1];
// if (j) a[j] = tmp;
// }
//}