개발 기록/C Language

[C언어] 선택 정렬 알고리즘 구현 | Selection Sort

우준성 2021. 5. 11. 18:14

선택 정렬은 아래 그림처럼 맨 앞의 수부터 제일 작은 수를 비교해 앞으로 보내는 과정을 반복하는 것이다.

현재 인덱스와 뒤의 가장 작은 값의 인덱스를 선택하여 교체하는 것에서 선택 정렬이라고 한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 배열 출력 함수
void printArr(int value[], int n)
{
	for (int i = 0; i < n; i++)
		printf("%3d", value[i]);
	printf("\n");
}

// 선택 정렬 실행 함수
void selectionSort(int* value, int n)
{
	int i, j;
	int min = 0;
	int temp = 0; // swap에 쓰기 위한 변수 (임시)

	// i for문 : 
	for (i = 0; i < n - 1; i++)
	{
		min = i; // 인덱스
		for (j = i + 1; j < n; j++)
		{
			if (value[min] > value[j])
				min = j;
		}
        
		// 검사한 값중 가장 작은 값과 value[i]값 swap 과정.
		temp = value[i];
		value[i] = value[min];
		value[min] = temp;
	}
}

int main(void)
{
	int value[] = { 4, 7, 9, 11, 3, 7, 6 };
	int n = sizeof(value) / sizeof(int); // 배열의 길이

	printArr(value, n);
	selectionSort(value, n);
	printArr(value, n);

	return 0;
}

min변수는 검사할 배열에서 가장 작은 값이 있는 인덱스 번호를 저장하기 위한 변수이다.

 

 

selectionSort 함수의 첫번째 for문에서 n - 1은 "배열이 1개인 경우에는 실행할 필요가 없기 때문에" 이렇게 쓰는 것이다.

selectionSort 함수의 두번째 for문에서 i + 1은 "검사한 작은 값을 제외한 뒤의 값을 i인덱스 값과 비교하기 위해" 이렇게 쓰는 것이다.

반응형