C언어 선택정렬 (Selection Sort)

코딩C언어
읽는데 8분 소요
처음 쓰여진 날: 2026-02-10
마지막 수정일: 2026-02-10
조회수: 7

요약

C언어 선택정렬의 원리와 동작 과정을 단계별로 알아봅니다. do-while 이중 루프를 활용한 선택정렬 코드를 분석하고, 정보처리기사 실기에 출제된 선택정렬 문제를 풀어봅니다.

선택정렬 핵심 정리

개념설명예시
선택정렬가장 작은(또는 큰) 값을 찾아 앞으로 보내는 정렬{64, 25, 12} → {12, 25, 64}
교환 (swap)두 변수의 값을 서로 바꾸는 동작tmp=a; a=b; b=tmp;
오름차순작은 수부터 큰 수 순서11, 12, 22, 25, 64
내림차순큰 수부터 작은 수 순서64, 25, 22, 12, 11

선택정렬이란?

선택정렬(Selection Sort)배열에서 가장 작은 값을 선택하여 앞쪽으로 보내는 정렬 알고리즘입니다.

동작 원리

  1. 배열의 첫 번째 위치부터 시작합니다.
  2. 현재 위치의 값과 나머지 값들을 하나씩 비교합니다.
  3. 현재 위치보다 더 작은 값을 발견하면 교환합니다.
  4. 다음 위치로 이동하여 같은 과정을 반복합니다.

선택정렬 코드

기본 코드 (for문)

c
코드 하이라이팅 중...

출력: 11 12 22 25 64

부분역할
for (i = 0; i < n - 1; i++)기준 위치를 0부터 n-2까지 이동
for (j = i + 1; j < n; j++)기준 위치 다음부터 끝까지 비교
if (arr[i] > arr[j])앞의 값이 더 크면 교환 (오름차순)
tmp = arr[i]; ...두 값을 교환하는 swap 코드
중첩 for문 동작 과정
바깥 for문(i)이 1회 실행될 때마다 안쪽 for문(j)이 처음부터 끝까지 실행됩니다. 안쪽 for문이 끝나면 j는 변수 스코프에 의해 사라집니다.

기출문제 코드 (do-while문)

기출문제에서 출제된 선택정렬 코드입니다. 위 for문과 동일한 동작을 do-while 반복문으로 작성한 것입니다.

c
코드 하이라이팅 중...

출력: 11 12 22 25 64

코드 구조 분석

부분역할
int arr[] = {64, 25, 12, 22, 11}정렬할 배열 선언
n = sizeof(arr) / sizeof(arr[0])배열 크기 계산 (5)
바깥쪽 do-while (i)기준 위치를 0부터 n-2까지 이동
안쪽 do-while (j)기준 위치 다음부터 끝까지 비교
if (arr[i] > arr[j])앞의 값이 더 크면 교환 (오름차순)
tmp = arr[i]; ...두 값을 교환하는 swap 코드


정렬 과정 따라가기

c
코드 하이라이팅 중...

이 배열을 오름차순으로 정렬하는 과정을 단계별로 따라갑니다.

i = 0: arr[0]과 나머지 비교

arr[0] = 64를 arr[1] ~ arr[4]와 차례로 비교합니다.

비교arr[i] > arr[j]?동작배열 상태
arr[0]=64 vs arr[1]=2564 > 25 참교환{25, 64, 12, 22, 11}
arr[0]=25 vs arr[2]=1225 > 12 참교환{12, 64, 25, 22, 11}
arr[0]=12 vs arr[3]=2212 > 22 거짓유지{12, 64, 25, 22, 11}
arr[0]=12 vs arr[4]=1112 > 11 참교환{11, 64, 25, 22, 12}

i = 0이 끝나면 arr[0]에 가장 작은 값 11이 위치합니다.

i = 1: arr[1]과 나머지 비교

비교arr[i] > arr[j]?동작배열 상태
arr[1]=64 vs arr[2]=25교환{11, 25, 64, 22, 12}
arr[1]=25 vs arr[3]=22교환{11, 22, 64, 25, 12}
arr[1]=22 vs arr[4]=12교환{11, 12, 64, 25, 22}

i = 1이 끝나면 arr[1]에 두 번째로 작은 값 12가 위치합니다.

i = 2: arr[2]와 나머지 비교

비교arr[i] > arr[j]?동작배열 상태
arr[2]=64 vs arr[3]=25교환{11, 12, 25, 64, 22}
arr[2]=25 vs arr[4]=22교환{11, 12, 22, 64, 25}

i = 3: arr[3]과 나머지 비교

비교arr[i] > arr[j]?동작배열 상태
arr[3]=64 vs arr[4]=25교환{11, 12, 22, 25, 64}
선택정렬 개념
선택정렬은 배열에서 가장 작은 값을 찾아 앞으로 보내는 과정을 반복합니다.

최종 결과

text
코드 하이라이팅 중...

출력: 11 12 22 25 64


교환 (swap) 코드

두 변수의 값을 바꾸려면 임시 변수(tmp) 가 필요합니다.

c
코드 하이라이팅 중...
단계tmparr[i]arr[j]
교환 전-6425
1. tmp = arr[i]646425
2. arr[i] = arr[j]642525
3. arr[j] = tmp642564

오름차순 vs 내림차순

비교 연산자 방향만 바꾸면 정렬 순서가 달라집니다.

정렬 순서조건의미결과
오름차순arr[i] > arr[j]앞이 더 크면 교환작은 값이 앞으로
내림차순arr[i] < arr[j]앞이 더 작으면 교환큰 값이 앞으로

do-while 반복문

이 문제의 선택정렬 코드는 for문이나 while문 대신 do-while문을 사용합니다.

do-while문의 구조

c
코드 하이라이팅 중...
구분while문do-while문
조건 검사 시점먼저 검사 후 실행먼저 실행 후 검사
최소 실행 횟수0회 (조건이 거짓이면 실행 안 함)1회 (무조건 한 번은 실행)
c
코드 하이라이팅 중...

선택정렬에서의 do-while

c
코드 하이라이팅 중...

이 코드를 for문으로 바꾸면 아래와 같습니다.

c
코드 하이라이팅 중...

실기 문제 풀이 전략

문제 유형

유형설명핵심
빈칸 채우기비교 연산자(> 또는 <) 채우기출력 결과가 오름/내림차순인지 확인
출력값 묻기정렬 후 배열 출력 결과정렬 과정을 단계별로 추적

풀이 순서

  1. 출력 결과 확인: 오름차순인지 내림차순인지 파악
  2. 비교 연산자 결정: 오름차순이면 >, 내림차순이면 <
  3. 정렬 과정 추적: 필요하면 배열 상태를 단계별로 기록

정보처리기사 실기 대비 문제