🎮 주제 : 선택 정렬 알고리즘의 메커니즘과 배열 조작의 기초
태그 : #C++ #알고리즘 #선택정렬 #배열 #sizeof #GitHubCopilot
📌 학습 요약
- 선택 정렬(Selection Sort) : 매 단계에서 가장 작은 값을 "선택"하여 맨 앞의 데이터와 교환하는 정렬 방식으로, 데이터 양이 적을 때 직관적이고 효율적인 구조 이해
- 배열 크기 제어 : sizeof 연산자를 활용하여 배열의 전체 크기를 원소 크기로 나누어 길이를 구하는 정렬의 기초 문법 숙지
- 루프 조건의 정밀도 : 비교 대상(j = i + 1)과 인덱스 범위(size - 1)를 설정할 때 발생할 수 있는 'Off-by-one error' 방지법 학습
- AI 코딩 보조 : GitHub Copilot의 개념을 이해하고 인공지능이 코드 작성 효율성에 미치는 긍정적 영향 파악
🛠 주요 코드 및 구현 상세
1. 선택 정렬(Selection Sort) 핵심 구현
// i는 정렬될 자리를 가리키고, j는 그 뒤의 최소값을 찾음
for (int i = 0; i < size - 1; i++) {
int minIndex = i; // 현재 i번째가 가장 작다고 가정
for (int j = i + 1; j < size; j++) {
// 더 작은 값을 발견하면 인덱스 갱신
if (list[minIndex] > list[j]) {
minIndex = j;
}
}
// 찾은 최소값과 현재 위치 i를 교환
int minValue = list[minIndex]; // 출력용 데이터 보존
swap(list[i], list[minIndex]);
cout << "현재 " << i << "번째 위치에 정렬된 최소값 : " << minValue << endl;
}
✅ 주요 문법 및 개념 정리
개념 설명 주의 사항
| sizeof(list) | 배열이 점유하는 전체 바이트 수 | 포인터 타입인 경우 배열 크기 측정 불가 |
| swap(a, b) | 두 변수의 값을 서로 맞바꿈 | <algorithm> 헤더 포함 필요 |
| i < size - 1 | 마지막 하나는 자동으로 정렬되므로 제외 | 인덱스 초과 접근 방지의 핵심 |
| j = i + 1 | 이미 정렬된 앞부분은 다시 비교할 필요 없음 | 불필요한 연산 낭비 제거 |
💡 배열 크기 계산의 원리
- sizeof(list) : 만약 int형 요소가 5개라면 20바이트 (4 x 5)
- sizeof(list[0]) : int형 한 칸의 크기인 4바이트
- 결과 : 20 / 4 = 5 (원소의 개수 도출)
✨ 느낀 점
- 간단한 정렬 알고리즘이라도 배열 범위와 반복 조건을 정교하게 설정하지 않으면 논리 오류가 발생하기 쉽다는 것을 다시 느낌
- minIndex와 minValue의 역할을 명확히 구분하여 데이터가 덮어쓰여지기 전에 필요한 값을 보존하는 법을 배움
- j = i + 1부터 시작하는 이유를 시각화하며 이미 정렬된 영역을 제외하는 최적화의 기본 원리를 이해함
- GitHub Copilot 같은 최신 도구를 도입하여 반복적인 패턴의 코딩 시간을 단축하는 효율성에 대해 기대감을 가짐
'SBS아카데미 > 게임프로그래밍' 카테고리의 다른 글
| [C++ - TIL] 에라토스테네스의 체를 이용한 효율적인 소수 판별 구현 (0) | 2025.08.18 |
|---|---|
| [C++ - TIL] 삽입 정렬의 메커니즘과 유클리드 호제법의 재귀적 구현 (0) | 2025.08.14 |
| [C++ - TIL] 알고리즘 성능 지표와 SFML 환경 설정의 이해 (0) | 2025.08.12 |
| [C++ - TIL] 원형 연결 리스트의 중복 데이터 제거 및 포인터 관리 (0) | 2025.08.07 |
| [C++ - TIL] 이진 탐색 트리(BST) 삭제 알고리즘의 완성 - 모든 케이스 구현 (0) | 2025.08.06 |