Study Log
Bubble Sort [MarkDown Test]
TypeMIN
2024. 1. 24. 17:18
728x90
Bubble Sort
- 배열의 연속된 두 원소의 크기를 비교하여 정렬하는 정렬 알고리즘
- 반복될 때 마다 가장 큰 원소부터 자신의 위치를 찾는다.
- $i$번째 반복에서는 뒤에서 $i$개의 (이미 정렬된) 원소를 제외해도 상관없다.
알고리즘
- $i$번째 반복에서는 뒤에서 $i$개의 (이미 정렬된) 원소를 제외해도 상관없다.
- 주어진 배열의 제일 앞의 두 원소 $x_1$, $x_2$를 선택한다.
- 두 원소가 정렬된 상태라면 그대로 두고, 그렇지 않다면 두 원소의 위치를 서로 바꾼다.
- (1), (2)를 배열의 처음부터 끝까지 반복한다.
- (1), (2), (3)을 배열에 아무 변화가 없을 때 까지 반복한다.
시간 복잡도
Compare | Change | |
---|---|---|
Best | $O(n)$ | $O(1)$ |
Average | $O(n^2)$ | $O(n^2)$ |
Worst | $O(n^2)$ | $O(n^2)$ |
## 공간 복잡도 | ||
Support | $O(1)$ | |
:--- | :--- | |
## 예제 | ||
### Phase 1 : [3, 4, 2, 5, 1] | ||
- [3, 4, 2, 5, 1] | ||
- 3 < 4 이므로 변동 X | ||
- [3, 4, 2, 5, 1] | ||
- 4 > 2 이므로 두 수를 바꿈 | ||
- [3, 2, 4, 5, 1] | ||
- 4 < 5 이므로 변동 X | ||
- [3, 2, 4, 5, 1] | ||
- 5 > 1 이므로 두 수를 바꿈 | ||
- [3, 4, 2, 1, 5] | ||
### Phase 2 : [3, 2, 4, 1, 5] | ||
- [3, 2, 4, 1, 5] | ||
- 2 < 3 이므로 변동 X | ||
- [2, 3, 4, 1, 5] | ||
- 3 < 4 이므로 변동 X | ||
- [2, 3, 4, 1, 5] | ||
- 4 > 1 이므로 두 수를 바꿈 | ||
- [2, 3, 1, 4, 5] | ||
- 4 < 5 이므로 변동 X | ||
- [2, 3, 1, 4, 5] |
Phase 3 : [2, 3, 1, 4, 5]
- [2, 3, 1, 4, 5]
- 2 < 3 이므로 변동 X
- [2, 3, 1, 4, 5]
- 3 > 1 이므로 두 수를 바꿈
- [2, 1, 3, 4, 5]
- 3 < 4 이므로 변동 X
- [2, 1, 3, 4, 5]
- 4 < 5 이므로 변동 X
- [2, 1, 3, 4, 5]
Phase 4 : [2, 1, 3, 4, 5]
- [2, 1, 3, 4, 5]
- 2 > 1 이므로 두 수를 바꿈
- [1, 2, 3, 4, 5]
- 2 < 3 이므로 변동 X
- [1, 2, 3, 4, 5]
- 3 < 4 이므로 변동 X
- [1, 2, 3, 4, 5]
- 4 < 5 이므로 변동 X
- [1, 2, 3, 4, 5]
Phase 5 : [1, 2, 3, 4, 5]
- [1, 2, 3, 4, 5]
- 1 < 2 이므로 변동 X
- [1, 2, 3, 4, 5]
- 2 < 3 이므로 변동 X
- [1, 2, 3, 4, 5]
- 3 < 4 이므로 변동 X
- [1, 2, 3, 4, 5]
- 4 < 5 이므로 변동 X
- [1, 2, 3, 4, 5]
Phase 6 : [1, 2, 3, 4, 5]
- Phase 5에서 변동이 없었으므로 정렬 완료
코드
def bubble_Sort(x): is_changed = False for i in range(len(x) - 1): is_changed = False for j in range(len(x) - 1): if x[j] > x[j+1]: is_changed = True temp = x[j+1] x[j+1] = x[j] x[j] = temp if is_changed == False: break return x
728x90
반응형