1 분 소요

문제

12개의 입력값을 가지고 Array를 사용하여 선택정렬하기

풀이

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define LENGTH 12

void swap(int arr[], int length, int idx1, int idx2)
{
    int temp = arr[idx1];
    arr[idx1] = arr[idx2];
    arr[idx2] = temp;

    printf("\n교환 발생\n");
    for (int j = 0; j < length; j++)
    {
        printf("ArrL[%d] = %d\n", j, arr[j]);
    }
}

void SelectionSort(int arr[], int length)
{
    for (int i = 0; i < length - 1; i++)
    {
        int minIdx = i;
        // 최소 구하기
        for (int j = i + 1; j < length; j++)
        {
            if (arr[j] < arr[minIdx])
            {
                minIdx = j;
            }
        }
        swap(arr, LENGTH, i, minIdx);
    }
}

int main()
{
    printf("I am Sohn Soo Kyoung\n");
    printf("This Project is No_1 :: Selection Sort using Array.\n");
    printf("Please Cheer Up ! Until 2022.05.23\n\n");

    int ArrL[12];
    int inputSize = 0; // 입력받은 만큼의 원소를 출력하기 위한 변수
    for (int i = 0; i < LENGTH; i++)
    {
        scanf("%d", &ArrL[i]);
        inputSize++;
        printf("\n%d단계: \n", inputSize);
        for (int j = 0; j < inputSize; j++)
        {
            printf("ArrL[%d] = %d\n", j, ArrL[j]);
        }
    }

    SelectionSort(ArrL, LENGTH);

    int sum = 0;
    double avg;
    printf("최종 내림차순 정렬\n");
    for (int i = LENGTH - 1; i >= 0; i--)
    {
        printf("ArrL[%d] = %d\n", i, ArrL[i]);
        sum += ArrL[i];
    }
    avg = sum / (double)LENGTH;
    printf("배열 내 %d개의 원소 값의 합: %d\n", LENGTH, sum);
    printf("배열 내 %d개의 원소 값의 평균: %f\n", LENGTH, avg);
}

풀이 설명

12개의 수를 입력을 받으면 SelectionSort()로 넘어가서 배열의 선택 정렬을 진행합니다. 교환이 발생했을 때마다 배열을 출력하라는 조건이 있었으므로 조건에 맞는 swap()을 만들었습니다.

  • void swap(int arr[], int length, int idx1, int idx2) : 배열 arr에서 인덱스가 idx1인 원소와 인덱스가 idx2인 원소를 바꾸어 줍니다.
  • void SelectionSort(int arr[], int length) : 선택 정렬을 위한 함수입니다. 이중 for문을 돌리면서 바깥 for문에서의 인덱스를 비교를 위한 기준점이라고 했을 때, 안쪽 for문을 바깥 for문 인덱스 + 1부터 끝까지 비교를 하면서 최소값을 구합니다. 그 후, 기준점과 최소값의 위치를 바꾸어주는 선택 정렬 알고리즘이 적용된 함수입니다.

댓글남기기