Vienna
5일차 (3) 본문
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;
// }
//}
'알고리즘 문제 풀이 > Do It! 자료구조와 함께 배우는 알고리즘 입문 C언어 편' 카테고리의 다른 글
5일차 (5) (0) | 2021.11.24 |
---|---|
5일차 (4) (0) | 2021.11.23 |
5일차 (2) (0) | 2021.11.23 |
5일차 (1) (0) | 2021.11.23 |
4일차 (4) (0) | 2021.11.22 |
Comments