본문 바로가기
전산 관련 시험/프로그래밍(C, JAVA, Python)

[C] 프로그래밍 언어 (선택 정렬 알고리즘) (23.02 18)

by 응_비 2024. 10. 6.
#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]);
}

 
해설:

  1. 이 프로그램은 선택 정렬 알고리즘을 구현하여 E 배열을 오름차순으로 정렬합니다.
  2. E[i] < E[j] 조건문을 사용하여 E[i]가 E[j]보다 작을 때 값을 교환합니다.
  3. 배열이 정렬된 후 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 반복문을 사용하여 내림차순으로 정렬하고, 최종적으로 정렬된 배열을 출력합니다.

댓글