#include <stdio.h>
main() {
int E[] = { 64, 25, 12, 22, 11 };
int n = sizeof(E) / sizeof(E[0]);
int i = 0;
do {
int j = i + 1;
do {
if (E[i] < E[j]) { // 여기에서 E[i] < E[j]를 사용하여 오름차순 정렬
int tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
j++;
} while (j < n);
i++;
} while (i < n - 1);
for (int i = 0; i < n; i++)
printf("%d ", E[i]);
}
해설:
- 이 프로그램은 선택 정렬 알고리즘을 구현하여 E 배열을 오름차순으로 정렬합니다.
- E[i] < E[j] 조건문을 사용하여 E[i]가 E[j]보다 작을 때 값을 교환합니다.
- 배열이 정렬된 후 for 문에서 모든 요소를 출력합니다.
출력 결과: 64 25 22 12 11
해당 코드를 순차적으로 설명해 드리겠습니다.
#include <stdio.h>
main() {
int E[] = { 64, 25, 12, 22, 11 }; // 정수 배열 E를 {64, 25, 12, 22, 11}로 초기화
1. #include <stdio.h>: 표준 입출력 함수들을 사용하기 위해 stdio.h 헤더 파일을 포함합니다.
2. main() 함수: 프로그램의 진입점이며, 실행이 시작되는 곳입니다.
3. int E[] = { 64, 25, 12, 22, 11 };: 정수형 배열 E를 선언하고 {64, 25, 12, 22, 11}로 초기화합니다.
int n = sizeof(E) / sizeof(E[0]); // 배열 E의 크기를 계산하여 n에 저장
4. int n = sizeof(E) / sizeof(E[0]);: sizeof(E)는 배열 E의 전체 크기(바이트 단위)입니다. sizeof(E[0])는 배열의 첫 번째 요소 E[0]의 크기(바이트 단위)입니다. 이 두 값을 나누면 배열 E의 총 요소 개수 5를 얻습니다. 이를 n에 저장하여 배열의 크기를 계산합니다.
int i = 0; // 정렬을 시작할 i 인덱스 초기화
do {
5. int i = 0;: 반복문에서 사용할 변수 i를 초기화합니다. i는 바깥 do-while 반복문의 인덱스 역할을 합니다.
6. do: do-while 반복문이 시작됩니다. do-while 반복문은 조건을 확인하기 전에 본문을 먼저 실행하는 반복문입니다.
int j = i + 1; // j는 i 다음의 인덱스부터 시작
do {
7. int j = i + 1;: j 변수를 선언하고 i + 1로 초기화합니다. j는 i 다음 인덱스부터 배열의 끝까지 순회하며 값을 비교하는 데 사용됩니다.
8. do: 내부 do-while 반복문이 시작됩니다. j를 기준으로 배열의 값을 비교하고 필요 시 교환합니다.
if (E[i] < E[j]) { // E[i]와 E[j]를 비교하여 E[i]가 더 작은 경우 두 값을 교환
int tmp = E[i]; // tmp에 E[i]를 저장
E[i] = E[j]; // E[i]에 E[j]를 저장
E[j] = tmp; // E[j]에 tmp에 저장된 E[i]의 값을 저장하여 두 값 교환
}
9. if (E[i] < E[j]): 배열 E의 i번째 값이 j번째 값보다 작은 경우 두 값을 교환합니다. 이렇게 하면 더 큰 값이 i에 위치하게 되어 배열이 내림차순으로 정렬됩니다.
10. int tmp = E[i];: 임시 변수 tmp에 E[i]의 값을 저장합니다.
11. E[i] = E[j];: E[i]에 E[j]의 값을 저장합니다.
12. E[j] = tmp;: tmp에 저장된 E[i]의 값을 E[j]에 저장하여 E[i]와 E[j]의 값을 교환합니다.
j++; // 다음 인덱스로 이동
} while (j < n); // j가 배열의 끝까지 반복
13. j++: j의 값을 1 증가시켜 다음 인덱스로 이동합니다.
14. } while (j < n);: j가 배열의 끝(즉, j < n일 때)까지 내부 do-while 반복문을 실행합니다.
i++; // 다음 i 인덱스로 이동
} while (i < n - 1); // i가 배열의 끝에서 두 번째 인덱스까지 반복
15. i++: i의 값을 1 증가시켜 다음 인덱스로 이동합니다.
16. } while (i < n - 1);: i가 배열의 끝에서 두 번째 인덱스(즉, i < n - 1일 때)까지 바깥 do-while 반복문을 실행합니다. i가 n - 1보다 작아야 하므로, 마지막 인덱스는 반복에서 제외됩니다.
for (int i = 0; i < n; i++) // 정렬된 배열을 출력
printf("%d ", E[i]); // 배열의 각 요소를 출력
}
17. for (int i = 0; i < n; i++): 배열의 모든 요소를 순회하는 for 반복문입니다.
18. printf("%d ", E[i]);: 배열 E의 각 요소를 출력합니다. 출력 형식은 정수형 %d이며, 요소들 사이에 공백이 들어갑니다.
19. }: main() 함수의 끝을 나타냅니다.
요약
이 프로그램은 배열을 do-while 반복문을 사용하여 내림차순으로 정렬하고, 최종적으로 정렬된 배열을 출력합니다.
'전산 관련 시험 > 프로그래밍(C, JAVA, Python)' 카테고리의 다른 글
[JAVA] 프로그래밍 언어 (24.01 01) (1) | 2024.10.06 |
---|---|
[Python] 프로그래밍 언어 (23.02 19) (0) | 2024.10.06 |
[JAVA] 프로그래밍 언어 (23.02 14) (1) | 2024.10.06 |
[C] 프로그래밍 언어 (23.02 09) - 스택 이해 (1) | 2024.10.06 |
[C] 프로그래밍 언어 (23.02 07) (1) | 2024.10.06 |
댓글