버블 정렬은 가장 간단한 정렬 알고리즘 중 하나로 , 인접한 요소들을 비교하여 정렬하는 방식입니다.
배열의 처음부터 끝까지 인접한 두 요소를 비교하고, 순서가 잘못된 경우 두 요소를 교환합니다. 이 과정을 배열의 끝까지 반복합니다.
한 번의 반복이 끝나면 가장 큰 값이 배열의 끝으로 이동하게 됩니다. 이 과정을 반복하여 전체 배열이 정렬될 때까지 수행합니다.(오름차순)
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n) {
bool swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false; // 교환 여부를 추적
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 두 요소 교환
swap(arr[j], arr[j + 1]);
swapped = true; // 교환이 이루어졌음을 표시
}
}
// 교환이 없으면 정렬 완료
if (!swapped) {
break;
}
}
}
// 배열 출력 함수
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
cout << "정렬된 배열: ";
printArray(arr, n);
return 0;
}
- 배열의 첫 번째 요소부터 시작합니다.
- 인접한 두 요소를 비교합니다.
- 두 요소의 순서가 잘못되었다면 교환합니다.
- 배열의 끝까지 이 과정을 반복합니다.
- 배열의 끝에서부터 다시 시작하여 위 과정을 반복합니다.
- 더 이상 교환이 이루어지지 않을 때까지 반복합니다.
시간 복잡도가 비효율적입니다.
O(n²) (n은 배열의 크기)
이미 정렬 된 경우는
O(n)
간단하고 쉬운 정렬 알고리즘이지만 시간복잡도가 비효율적이기 때문에
데이터가 많을 경우는 다른 정렬 알고리즘을 사용하는 것이 좋을 것같습니다.
평소에 정렬할 때 간단해서 많이 사용 하던 방식이였는데 간단하지만 효율은 좋지 않더군요
'TIL' 카테고리의 다른 글
2024-12-31 삽입 정렬 (2) | 2024.12.31 |
---|---|
2024- 12 - 31 선택 정렬 (0) | 2024.12.31 |
2024-12 - 31 연결 리스트 , 단일 연결 리스트 (0) | 2024.12.31 |
2024- 12- 31 수학 로그 공부 ( 지수 포함) (0) | 2024.12.31 |
2024 - 12 - 31 시간 복잡도 공부 (0) | 2024.12.31 |