목표
버블 정렬(Bubble Sort)을 구현하여 배열 안의 숫자를 오름차순으로 정렬하는 알고리즘을 블루프린트로 작성.
1. 버블 정렬 개요
- 
정의:
- 버블 정렬은 두 개의 인접한 값을 비교하여 정렬하는 간단한 알고리즘.
 
- 가장 큰 값이 배열 끝으로 "버블"처럼 떠오르게 된다.
 
 
- 
동작 원리:
- 첫 번째 반복: 배열의 처음부터 끝까지, 인접한 두 값을 비교하고 교환(Swap).
 
- 두 번째 반복: 끝에서 두 번째 값까지만 비교 (맨 끝 값은 이미 정렬).
 
- 반복 횟수는 배열 길이에 따라 줄어든다.
 
 
2. 블루프린트 구조 분석
A. 한 턴 구현
- 
For Loop:
First Index: 0. 
Last Index: 배열의 길이 - 2. 
- 배열의 길이에서 2를 빼는 이유는 현재 인덱스와 그다음 인덱스를 비교해야 하므로, 마지막 인덱스를 넘어갈 수 없게 제한.
 
 
- 
Get 노드:
 
- 
Branch (조건문):
- 현재 값이 다음 값보다 큰지 비교.
 
- 조건이 참(True)인 경우에만 교환(Swap)을 실행.
 
 
- 
Swap 노드:
 
B. 전체 반복 구현
- 
외부 For Loop:
First Index: 0. 
Last Index: 배열의 길이 - 1. 
- 배열 전체를 정렬하기 위해 반복.
 
 
- 
내부 For Loop:
- 반복 범위를 하나씩 줄임:
- 첫 번째 반복: 배열의 끝까지 비교.
 
- 두 번째 반복: 배열의 끝 - 1까지 비교.
 
- 이런 방식으로 점점 비교 범위를 줄여 효율적으로 정렬.
 
 
 
3. 디버깅 및 과정 분석
초기 상태
- 배열 
{ 5, 1, 9, 7, 2, 3 }이 주어짐. 
- 아직 정렬되지 않은 상태.
 
첫 번째 반복 결과
- 
첫 번째 비교 (5와 1):
- 조건: 5 > 1 (참).
 
- Swap 실행 → 
{ 1, 5, 9, 7, 2, 3 }. 
 
- 
두 번째 비교 (5와 9):
- 조건: 5 > 9 (거짓).
 
- Swap 실행 안 됨 → 
{ 1, 5, 9, 7, 2, 3 }. 
 
- 
이후 비교:
- 9와 7 → Swap 실행 → 
{ 1, 5, 7, 9, 2, 3 }. 
- 9와 2 → Swap 실행 → 
{ 1, 5, 7, 2, 9, 3 }. 
- 9와 3 → Swap 실행 → 
{ 1, 5, 7, 2, 3, 9 }. 
 
두 번째 반복 결과
- 
첫 번째 비교 (1과 5):
- 조건: 1 > 5 (거짓).
 
- Swap 실행 안 됨 → 
{ 1, 5, 7, 2, 3, 9 }. 
 
- 
이후 비교:
- 7과 2 → Swap 실행 → 
{ 1, 5, 2, 7, 3, 9 }. 
- 7과 3 → Swap 실행 → 
{ 1, 5, 2, 3, 7, 9 }. 
 
최종 결과
- 배열 
{ 1, 2, 3, 5, 7, 9 }로 정렬 완료. 
4. 코드 최적화
문제점
- 내부 For Loop에서 이미 정렬된 배열을 계속 비교.
 
- 불필요한 연산이 발생.
 
해결 방법
- 내부 For Loop의 
Last Index를 반복 횟수마다 1씩 줄임. 
- 정렬된 값은 비교에서 제외하여 연산 최적화.
 
결과
5. Swap 노드 역할
- Swap은 두 인덱스의 값을 교환하는 핵심 역할.
 
- 배열에서 특정 인덱스를 직접 접근하여 값을 바꿔줌.
 
6. 블루프린트 실행 흐름
- 
BubbleSort 이벤트:
 
- 
외부 For Loop:
 
- 
내부 For Loop:
 
- 
Branch 조건문:
- 현재 값이 다음 값보다 큰 경우에만 Swap 실행.
 
 
- 
Swap 노드:
 
7. 장점과 단점
장점
- 구현이 간단하고 직관적.
 
- 소규모 배열 정렬에 적합.
 
단점
- 시간 복잡도가 (O(n^2))으로 비효율적.
 
- 대규모 배열에 사용 시 성능 저하.