선택 정렬은 아래 그림처럼 맨 앞의 수부터 제일 작은 수를 비교해 앞으로 보내는 과정을 반복하는 것이다.
현재 인덱스와 뒤의 가장 작은 값의 인덱스를 선택하여 교체하는 것에서 선택 정렬이라고 한다.
#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인덱스 값과 비교하기 위해" 이렇게 쓰는 것이다.
반응형