์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 9
ํ์ต๊ธฐ๋ก
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
- ๋ฒ๋ธ์ ๋ ฌ - 1
- ๋ฒ๋ธ์ ๋ ฌ - 2
์๊ณ ๋ฆฌ์ฆ ์ฐ์ต ๋ฐฉ๋ฒ
์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ , ์ค์ค๋ก ๋ง๋ค์ด๋ณด๊ธฐ
- ๋ ธํธ + ํ -> ์๊ณ ๋ฆฌ์ฆ ์๊ฐ
- ๋ฌธ์ ๋ถ์
- ๊ฐ๋จํ ์ผ์ด์ค๋ถํฐ ํด๊ฒฐ๋ฐฉ๋ฒ ์๊ฐ
- ์ ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ธ๋ถ์ ์ผ๋ก ๋๋์ด์ ์๊ฐ์ ์ ๋ฆฌ(์๊ณ ๋ฆฌ์ฆ ์์ฑ)
- ์ง๊ธ๊น์ง ๊ธ๋ก ์์ฑํ ๊ฒ๋ค์ ์ฝ๋๋ก ์์ฑ
- ํ ์คํธํ๋ค.
- 1~6์ ๋ฐ๋ณต
โ์ฌ๊ธฐ๊น์ง๊ฐ 1๋ฒ ๊ฐ์ ๋ด์ฉ
๋ฒ๋ธ์ ๋ ฌ(Bubble Sort)
์ธ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋งจ ์ฒ์๋ถํฐ ์ธ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ ์์ ๋ฐ์ดํฐ๊ฐ ๋ ํฌ๋ค๋ฉด, ์๋ก ์ค์ํ๋ค.
- ๊ฐ์ฅ ๋ง์ง๋ง ๋ฐ์ดํฐ๊น์ง ํ์ธํ ๋๊น์ง ๋ค์ ์ธ๋ฑ์ค๋ก ๊ฐ์ ์๋ฅผ ๋ฐ๋ณตํ๋ค.
- ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ํ์ธ๋์์ผ๋ฉด, ์ฒ์ ์ธ๋ฑ์ค๋ถํฐ ์์ํด์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ๋ค์ ์์ํ๋ค.
(๋ง์ง๋ง ๋ฐ์ดํฐ๋ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ๊ณ ์ ๋์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฌ์ดํด์์ ๋น๊ตํ์ง ์๋๋ค.) - ์ด๋ฅผ ๋ ์ด์ ๋น๊ตํ ํญ๋ชฉ์ด ๋จ์ง ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
๋ง์ ํ ์คํธ๋ก ์ ๋ฆฌํ๋ ค๋ ์ฝ์ง๊ฐ ์๋ค..
๋ฒ๋ธ์ ๋ ฌ ์ผ์ด์ค
-
2๊ฐ์ ๋ฐ์ดํฐ
3 1 -> 1๊ณผ 3 ์ค์
1 3 -
3๊ฐ์ ๋ฐ์ดํฐ
5 3 1 -> 5์ 3 ์ค์
3 5 1 -> 5์ 1 ์ค์, (5๋ ๊ฐ์ฅ ํฐ ์๋ก ๋งจ ๋ค์ ์ค๊ฒ ๋จ, ๋ค์ ์ฌ์ดํด์ ๋น๊ตํ์ง ์๋๋ค)
3 1 5 -> 1๊ณผ 3 ์ค์
1 3 5 -
4๊ฐ์ ๋ฐ์ดํฐ
7 5 3 1 -> 7, 5
5 7 3 1 -> 7, 3
5 3 7 1 -> 7, 1, (7์ ๊ฐ์ฅ ํฐ ์๋ก ๋งจ ๋ค์ ์ค๊ฒ ๋จ, ๋ค์ ์ฌ์ดํด์ ๋น๊ตํ์ง ์๋๋ค.)
5 3 1 7 -> 5, 3
3 5 1 7 -> 5, 1, (5๋ ๊ฐ์ฅ ํฐ ์๋ก ๋งจ ๋ค์ ์ค๊ฒ ๋จ, ๋ค์ ์ฌ์ดํด์ ๋น๊ตํ์ง ์๋๋ค.)
3 1 5 7 -> 3, 1
1 3 5 7
๋ฒ๋ธ์ํธ ๊ตฌํ
import random
def BubbleSort(list):
for cycle in range(0, len(list) - 1):
swapped = False
for i in range(0, len(list) - cycle - 1):
if list[i] > list[i + 1]:
list[i], list[i + 1] = list[i + 1], list[i]
swapped = True
# ์ด ์ฌ์ดํด์ ํ๋ฒ์ด๋ผ๋ ์ค์๋์ง ์์๋ค๋ ๊ฒ์
# ์ ๋ ฌ๋์ด์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ์ข
๋ฃ
if not swapped:
break
list = random.sample(range(50), 10)
print("before : ", list)
BubbleSort(list)
print("after : ", list)
๊ฒฐ๊ณผํ์ธ
์คํ์ ํตํด ์ ์์ ์ผ๋ก ์ํธ๊ฐ ๋๋ค๋ ๊ฒ์ ํ์ธ ํ ์ ์์๋ค.
๋ค์ ์ ๋ฆฌ
- swapped๋ณ์๋ฅผ ๋๊ณ , 2๋ฒ ์ด์ ์ False๋ก ์ด๊ธฐํํ๋ค.
- ์ธ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ ์ผ์ชฝ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด ์ค์ํ๊ณ , swapped๋ฅผ True๋ก ์ค์ ํ๋ค. (์ค๋ฆ์ฐจ์ ์ ๋ ฌ)
- 2๋ฒ์ ๋งจ ์ฒ์๋ถํฐ ๋ง์ง๋ง ๋ฐ์ดํฐ๊น์ง ๋ฐ๋ณตํ๋ค.
- ์ถ๊ฐ swapped๊ฐ False๋ฉด, ์ข ๋ฃํ๋ค.
- ์ด์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ ์ ๋ ฌ์ด ๋ ์ํ์ด๋ค.
๋ค์ 2, 3๋ฒ์ ๋ฐ๋ณตํ ๋๋ ํ์ฌ์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ๊ณ ์งํํ๋ค. - ์ ๋ ฌํ ๋ฐ์ดํฐ๊ฐ ์์๋๊น์ง ๋ฐ๋ณตํ๋ค.
์๊ฐ๋ณต์ก๋
n๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฆฌ์คํธ๋ผ ํ ๋,
์ต์
์ ๊ฒฝ์ฐ $\sum_{k=1}^{n-1} k$๋ฒ ์ค์ํ๊ฒ ์ง๋ง,
์๊ฐ๋ณต์ก๋๋ ๋น
์คํ๊ธฐ๋ฒ์ ์ํด $\sum_{k=1}^{n-1} k = {(n-1)(n-2)\over2} = O(n^2)$๊ฐ ๋๋ค.
๋ง์ง๋ง
์ฌ์ง ํ์ฅ์ ์ด๊ฑธ๋ก ์ฑ์์ผ์ง ํํ
๋๊ธ๋จ๊ธฐ๊ธฐ