Java 정렬과 순위 알고리즘
코딩Java
읽는데 4분 소요
처음 쓰여진 날: 2026-03-28
마지막 수정일: 2026-03-28
조회수: 0
요약
Java에서 출제된 정렬(버블 정렬)과 순위 알고리즘을 알아봅니다. swap 패턴, 이중 for문 구조를 이해하여 정보처리기사 실기 문제를 풀어봅니다.
정렬과 순위 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| swap | 두 변수의 값을 교환 | t=a; a=b; b=t; |
| 버블 정렬 | 인접 요소를 비교하여 교환 | {5,3,1} → {1,3,5} |
| 순위 알고리즘 | 자신보다 큰 값의 개수 + 1 = 순위 | {79,34} → 순위 {1,2} |
swap (값 교환)
정렬 알고리즘에서 swap은 두 값을 서로 바꾸는 동작입니다. 임시 변수 t를 사용하여 값이 사라지지 않도록 합니다.
java
코드 하이라이팅 중...
예를 들어 a[0]=5, a[1]=3을 교환하면:
| 단계 | a[0] | a[1] | t |
|---|---|---|---|
| 시작 | 5 | 3 | - |
| ① t = a[0] | 5 | 3 | 5 |
| ② a[0] = a[1] | 3 | 3 | 5 |
| ③ a[1] = t | 3 | 5 | 5 |
임시 변수 없이는 교환할 수 없습니다
t 없이 a[0] = a[1]을 먼저 하면 a[0]의 원래 값(5)이 사라집니다. 반드시 임시 변수에 먼저 저장해야 합니다.
버블 정렬 (Bubble Sort)
버블 정렬은 인접한 두 요소를 비교하여, 순서가 잘못되었으면 교환하는 정렬 알고리즘입니다. 이 과정을 배열 전체에 대해 반복하면 가장 큰 값이 뒤로 밀려나면서 정렬됩니다.
java
코드 하이라이팅 중...
동작 원리
배열 {5, 3, 1}을 오름차순 정렬하는 과정입니다.
1회전 (i=0): 인접 요소를 비교하며 가장 큰 값(5)이 맨 뒤로 이동
| 비교 | 조건 | 동작 | 배열 상태 |
|---|---|---|---|
| a[0]=5, a[1]=3 | 5 > 3 → 참 | swap | {3, 5, 1} |
| a[1]=5, a[2]=1 | 5 > 1 → 참 | swap | {3, 1, 5} |
2회전 (i=1): 마지막 1개(5)는 이미 정렬되었으므로 제외
| 비교 | 조건 | 동작 | 배열 상태 |
|---|---|---|---|
| a[0]=3, a[1]=1 | 3 > 1 → 참 | swap | {1, 3, 5} |
정렬 완료: {1, 3, 5}
내부 반복 범위: len - i - 1
j < len - i - 1에서 -i는 매 회전마다 이미 정렬된 뒤쪽 요소를 제외하기 위한 것입니다. i회전이 끝나면 뒤에서 i개는 이미 올바른 위치에 있습니다.
버블 정렬은 23년 1회에 빈칸 채우기로 출제되었습니다
swap 함수의 빈칸과 bubbleSort 호출 시 인자를 채우는 문제입니다. swap의 교환 패턴(t=a[idx1], a[idx1]=a[idx2], a[idx2]=t)을 정확히 이해해야 합니다.
순위 알고리즘
순위 알고리즘은 배열의 각 요소가 몇 번째로 큰지(또는 작은지) 구하는 알고리즘입니다. 이중 반복문으로 자신과 다른 모든 요소를 비교합니다.
java
코드 하이라이팅 중...
동작 원리
"나보다 큰 값의 개수 + 1 = 순위"라는 원리입니다. 가장 큰 값은 자신보다 큰 값이 0개이므로 순위 1, 두 번째로 큰 값은 1개이므로 순위 2가 됩니다.
| 요소 | 값 | 나보다 큰 값 | 개수 | 순위 (1+개수) |
|---|---|---|---|---|
| arr[0] | 79 | 99 | 1 | 2 |
| arr[1] | 34 | 79, 99, 50 | 3 | 4 |
| arr[2] | 10 | 79, 34, 99, 50 | 4 | 5 |
| arr[3] | 99 | 없음 | 0 | 1 |
| arr[4] | 50 | 79, 99 | 2 | 3 |
result = {2, 4, 5, 1, 3} → 출력: 24513
result를 1로 초기화하는 이유
순위는 1부터 시작합니다. 나보다 큰 값이 0개이면 1등, 1개이면 2등이 됩니다. 초기값을 0으로 하면 순위가 0부터 시작하여 틀립니다.