티스토리 뷰
반응형
버블 정렬(Bubble Sort)은 가장 단순하고 직관적인 정렬 알고리즘 중 하나입니다.
이름 그대로, 가장 큰(또는 작은) 값이 마치 거품처럼 리스트 끝으로 올라가는 모습에서 유래된 이름입니다.
🔷 1. 버블정렬의 개념
- 인접한 두 값을 비교하여
- 앞에 있는 값이 더 크면 서로 자리를 바꾸고,
- 뒤에 있는 값이 더 크면 그대로 둡니다.
- 이 과정을 리스트 끝까지 반복하면서 가장 큰 값을 뒤로 보내고,
- 그런 식으로 전체 리스트를 정렬해 나갑니다.
🔷 2. 작동 방식 (정렬 예시)
예를 들어, 다음 리스트를 오름차순으로 정렬한다고 가정합시다.
[5, 3, 8, 4, 2]
🔁 1회전 (가장 큰 수가 맨 뒤로 올라감)
- 5와 3 비교 → 바꿈 → [3, 5, 8, 4, 2]
- 5와 8 비교 → 그대로 → [3, 5, 8, 4, 2]
- 8과 4 비교 → 바꿈 → [3, 5, 4, 8, 2]
- 8과 2 비교 → 바꿈 → [3, 5, 4, 2, 8]
→ 가장 큰 수 8이 맨 뒤로 감
🔁 2회전
- 3과 5 비교 → 그대로
- 5와 4 비교 → 바꿈
- 5와 2 비교 → 바꿈
→ 두 번째로 큰 수 5가 제자리로
🔁 계속 반복...
최종 결과:
[2, 3, 4, 5, 8]
🔷 3. 시간 복잡도
케이스 | 시간 복잡도 |
---|---|
최선 (이미 정렬된 경우) | O(n) (개선된 버전에서만) |
평균 | O(n²) |
최악 | O(n²) |
🔷 4. 특징 요약
항목 | 설명 |
---|---|
방식 | 비교 정렬, 교환 정렬 |
정렬 방식 | 제자리(in-place), 안정 정렬 |
장점 | 구현이 매우 간단함 |
단점 | 느림 (큰 데이터에는 비효율적) |
🔷 5. 버블정렬이 사용되는 상황
- 알고리즘 수업의 입문용 예제
- 정렬의 기본 구조나 원리를 설명할 때
- 자료 개수가 매우 적을 때
버블 정렬 (Bubble Sort) - C++ 구현
📌 전체 코드
#include <iostream>
using namespace std;
// 버블 정렬 함수
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
// 마지막 i개는 이미 정렬되어 있으므로 n-i-1까지만 비교
for (int j = 0; j < n - i - 1; ++j) {
// 인접한 두 요소를 비교 후 자리 바꿈
if (arr[j] > arr[j + 1]) {
// swap 수행
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 배열 출력 함수
void printArray(int arr[], int n) {
for (int i = 0; i < n; ++i)
cout << arr[i] << " ";
cout << endl;
}
int main() {
// 예시 배열
int arr[] = {5, 3, 8, 4, 2};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "정렬 전 배열: ";
printArray(arr, n);
bubbleSort(arr, n);
cout << "정렬 후 배열: ";
printArray(arr, n);
return 0;
}
🧾 실행 결과
정렬 전 배열: 5 3 8 4 2
정렬 후 배열: 2 3 4 5 8
📝 설명
- bubbleSort(): 두 중첩 for문을 이용해 인접한 요소를 반복적으로 비교 및 교환합니다.
- printArray(): 배열을 한 줄로 출력해주는 함수입니다.
- 정렬 방식은 오름차순입니다.
반응형
'자격증 > 정보처리기사' 카테고리의 다른 글
제1정규형 (1NF) - 데이터베이스 정규화 (0) | 2025.04.15 |
---|---|
데이터베이스 정규형 (0) | 2025.04.15 |
MVC(Model–View–Controller) (0) | 2025.04.14 |
GoF 디자인 패턴 (1) | 2025.04.14 |
비기능적 요구 (0) | 2025.04.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 일본어문법무작정따라하기
- 심리학
- C
- 강화학습
- 백준
- 학습심리학
- 물류관리사
- 티스토리챌린지
- 행동주의
- 통계
- 윤성우
- 인지부조화
- 회계
- 정보처리기사
- 조건형성
- K-MOOC
- 학습이론
- 류근관
- Python
- 일문따
- c++
- 보세사
- 코딩테스트
- 행동심리학
- 오블완
- 일본어
- 통계학
- 파이썬
- 열혈프로그래밍
- 데이터분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함
반응형