정처기 감자정처기 감자
C언어알고리즘

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 선택정렬 (Selection Sort)

코딩C언어
읽는데 7분 소요
처음 쓰인 날: 2026-02-10
마지막 수정일: 2026-02-10
조회수: —
선수학습(1개)
  • 배열과 리스트의 기초

요약

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

선택정렬이란?

선택정렬 개념을 몰라도 문제는 풀 수 있습니다
실기 문제를 풀기 위해 선택정렬 알고리즘을 깊이 이해할 필요는 없습니다. 배열, 반복문, 값 교환(swap) 개념만 알면 코드를 따라가며 풀 수 있습니다. 하지만 알고리즘을 알고 있으면 훨씬 빠르게 문제를 풀 수 있으니 참고하는 걸 추천합니다.

선택정렬(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 코드
sizeof(arr) / sizeof(arr[0])은 배열 크기를 구하는 공식입니다
sizeof(arr)는 배열 전체 크기(바이트), sizeof(arr[0])는 요소 하나의 크기(바이트)입니다. 나누면 요소 개수가 됩니다. int가 4바이트일 때, 5개 요소면 20 / 4 = 5입니다.

정렬 과정 따라가기

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
왜 임시 변수가 필요한가요?
임시 변수 없이 arr[i] = arr[j]를 먼저 하면 arr[i]의 원래 값이 사라집니다. tmp에 미리 저장해야 나중에 arr[j]에 넣을 수 있습니다.

오름차순 vs 내림차순

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

정렬 순서조건의미결과
오름차순arr[i] > arr[j]앞이 더 크면 교환작은 값이 앞으로
내림차순arr[i] < arr[j]앞이 더 작으면 교환큰 값이 앞으로
기출문제에서 부등호 방향을 묻습니다
실행 결과가 오름차순(작은 수 → 큰 수)이면 >, 내림차순(큰 수 → 작은 수)이면 <를 넣어야 합니다. 출력 결과를 먼저 확인하세요.

실기 문제 풀이 전략

문제 유형

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

풀이 순서

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

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

문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999