Vienna

5일차 (1) 본문

Q7. 요소의 교환 과정을 자세하게 출력할 수 있도록 단순 선택 정렬 프로그램을 수정하세요. 오른쪽처럼 정렬하지 않은 부분의 첫 번째 요소 위에는 기호 *를, 정렬하지 않은 부분의 가장 작은 값의 요소 위에는 기호 +를 출력하세요.

내 답변:

 

void insertion(int a[], int n) {
	for (int i = 0; i<n-1 ; i++) {
		int min = i;

		for (int j = i; j < n; j++)
			if (a[j] < a[min])
				min = j;
		
		for (int j = 0; j < n; j++)
			printf("%3c", j == i ? '*' : j == min ? '+' : ' ');
		putchar('\n');

		for (int j = 0; j < n; j++)
			printf("%3d", a[j]);
		putchar('\n');

		swap(int, a[i], a[min]);
	}
	putchar('\n');
	for (int j = 0; j < n; j++)
		printf("%3d", a[j]);
	putchar('\n');
}

정답:

내 답변과 크게 다르지 않은 것 같다. 차이가 있다면

- 나: printf("%3c", j == i ? '*' : j == min ? '+' : ' ');

- 답변: printf((m == i) ? "  * " : (m == min) ? "  + " : "    ");

이 부분 정도. 하지만 크게 결은 다르지 않다...

///*--- 단순 선택 정렬(정렬 과정 출력)---*/
//void selection(int a[], int n)
//{
//	int i, j, m;
//
//	for (i = 0; i < n - 1; i++) {
//		int min = i;
//		for (j = i + 1; j < n; j++)
//			if (a[j] < a[min])
//				min = j;
//		for (m = 0; m < n; m++)
//			printf((m == i) ? "  * " : (m == min) ? "  + " : "    ");
//		putchar('\n');
//
//		for (m = 0; m < n; m++)
//			printf("%3d ", a[m]);
//		putchar('\n');
//
//		swap(int, a[i], a[min]);
//	}
//	putchar('\n');
//	for (m = 0; m < n; m++)
//		printf("%3d ", a[m]);
//	putchar('\n');
//}
//

'알고리즘 문제 풀이 > Do It! 자료구조와 함께 배우는 알고리즘 입문 C언어 편' 카테고리의 다른 글

5일차 (3)  (0) 2021.11.23
5일차 (2)  (0) 2021.11.23
4일차 (4)  (0) 2021.11.22
4일차 (3)  (0) 2021.11.22
4일차 (2)  (0) 2021.11.22
Comments