자료구조
자료구조 - 버블 정렬
tita
2024. 6. 11. 13:43
[버블 정렬(Bubble Sort)]
버블 정렬(Bubble Sort)은 정렬 알고리즘 중 하나로, 리스트의 요소를 순차적으로 비교하고 인접한 두 요소를 교환하여 정렬하는 방식입니다.
가장 큰 요소가 한 번의 반복 후 리스트의 끝으로 "거품"처럼 이동하는 것이 특징입니다.
버블 정렬은 단순하지만 효율성 면에서는 다른 정렬 알고리즘보다 떨어집니다.
시간 복잡도는 최악의 경우 O(n^2)입니다.
버블 정렬 과정
- 리스트의 첫 번째 요소부터 시작하여 인접한 두 요소를 비교합니다.
- 만약 첫 번째 요소가 두 번째 요소보다 크면, 두 요소를 교환합니다.
- 리스트 끝까지 이 과정을 반복하여 가장 큰 요소를 리스트의 끝으로 이동시킵니다.
- 리스트의 끝에서부터 한 요소씩 제외하고 위의 과정을 반복합니다.
- 리스트가 정렬될 때까지 반복합니다.
버블 정렬 의사 코드
함수 bubbleSort(arr):
n = 배열의 길이(arr)
for i = 0부터 n-1까지:
for j = 0부터 n-i-2까지:
if arr[j] > arr[j + 1]:
arr[j]와 arr[j + 1] 교환
반환 arr
버블 정렬의 예제
예시 리스트: [64, 25, 12, 22, 11]
첫 번째 반복:
(64, 25) 비교하여 교환 → [25, 64, 12, 22, 11]
(64, 12) 비교하여 교환 → [25, 12, 64, 22, 11]
(64, 22) 비교하여 교환 → [25, 12, 22, 64, 11]
(64, 11) 비교하여 교환 → [25, 12, 22, 11, 64]
두 번째 반복:
(25, 12) 비교하여 교환 → [12, 25, 22, 11, 64]
(25, 22) 비교하여 교환 → [12, 22, 25, 11, 64]
(25, 11) 비교하여 교환 → [12, 22, 11, 25, 64]
세 번째 반복:
(12, 22) 비교 → 교환하지 않음 → [12, 22, 11, 25, 64]
(22, 11) 비교하여 교환 → [12, 11, 22, 25, 64]
네 번째 반복:
(12, 11) 비교하여 교환 → [11, 12, 22, 25, 64]
버블 정렬 코드
#include <iostream>
#include <vector>
using namespace std;
// 버블 정렬 함수
void bubbleSort(vector<int>& arr)
{
int n = arr.size(); // 배열의 길이
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
swap(arr[j], arr[j + 1]); // 인접한 두 요소를 교환
}
}
}
}
int main()
{
vector<int> arr = {64, 25, 12, 22, 11}; // 예제 리스트
cout << "정렬 전: ";
for (int i : arr)
{
cout << i << " ";
}
cout << endl;
bubbleSort(arr); // 버블 정렬 수행
cout << "정렬 후: ";
for (int i : arr)
{
cout << i << " ";
}
cout << endl;
return 0;
}