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