5.1 ๋ฒ๋ธ ์ ๋ ฌ ์ ์
๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) โ ์ด๊ฑด ์์ฃผ ๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด์ผ. ๋ฆฌ์คํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ํํ๋ฉด์ ์ธ์ ํ ์์๋ค์ ๋น๊ตํ๊ณ , ๋ง์ฝ ์์๊ฐ ์๋ชป๋์์ผ๋ฉด ์๋ก ๊ตํํด. ์ด ํ๋ก์ธ์ค๋ ๋ฆฌ์คํธ๊ฐ ์์ ํ ์ ๋ ฌ๋ ๋๊น์ง ์ง์๋ผ.
์๋ ์๋ฆฌ:
- ์๊ณ ๋ฆฌ์ฆ์ด ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉด์ ๋ชจ๋ ์ธ์ ํ ์์ ์์ ๋น๊ตํด.
- ์์๋ค์ด ์๋ชป๋ ์์์ ์์ ๊ฒฝ์ฐ (์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ผ ๋ ์ฒซ ๋ฒ์งธ ์์๊ฐ ๋ ๋ฒ์งธ๋ณด๋ค ํด ๋) โ ์๋ก ๊ตํํด.
- ์ด ํ๋ก์ธ์ค๋ฅผ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์ ์์ ๋ํด ๋ฐ๋ณตํด.
- ์ ์ฒด ์ํ๊ฐ ๋๋๋ฉด ๊ฐ์ฅ ํฐ ์์๊ฐ ์์ ์ ์๋ฆฌ์ '๋ ์ค๋ฅด๊ฒ ๋ผ' (๋ฌผ ํ๋ฉด์ ๊ฑฐํ์ฒ๋ผ), ๊ทธ๋์ ๋ค์ ์ํ์์๋ ๋ ์ด์ ์ฐธ์ฌํ์ง ์์๋ ๋ผ.
- ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํด.
๋ฒ๋ธ ์ ๋ ฌ์ ์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก๋
์๊ฐ ๋ณต์ก๋:
-
์ต์
์ ๊ฒฝ์ฐ:
O(n^2)
โ ์์๋ค์ด ์ฒ์์ ์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ ๋ ๋ฐ์ํด. -
ํ๊ท ์ ๊ฒฝ์ฐ:
O(n^2)
โ ์์๋ค์ด ๋๋ค์ผ๋ก ๋ฐฐ์ด๋์ด ์์ ๋ ๋ฐ์ํด. -
์ต๊ณ ์ ๊ฒฝ์ฐ:
O(n)
โ ์์๋ค์ด ์ด๋ฏธ ์ ๋ ฌ๋์ด ์์ ๋ ๋ฐ์ํด (์ฌ๊ธฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตํ์ด ๋ฐ์ํ๋์ง ๊ฒ์ฌํ๋ ์ต์ ํ๋ฅผ ์ถ๊ฐํ ์ ์์ด).
๊ณต๊ฐ ๋ณต์ก๋:
O(1)
โ ์๊ณ ๋ฆฌ์ฆ์ด ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์
(์ผ์์ ์ธ ๊ฐ๋ค์ ์ ์ฅํ๊ธฐ ์ํ ๋ช ๊ฐ์ ๋ณ์๋ง ํ์ํด).
5.2 ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
'๋ฒ๋ธ ์ ๋ ฌ' ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ธฐ๋ณธ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด์ผ. ๋จ์ํ ์์๋ฅผ ์ง์ง์ด ๋น๊ตํ๊ณ ํ์์ ์์น๋ฅผ ๋ฐ๊พธ๋ ๊ฑฐ์ผ.
๋ฒ์ 1:
array = [6, 43, 2, 1, 2, 1, 1, 1, 1, 6, 7, 8]
n = len(array)
for i in range(n):
for j in range(n - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j] # ์์ ๊ตํ
print("์ ๋ ฌ๋ ๋ฐฐ์ด:", array)
# ์ถ๋ ฅ: ์ ๋ ฌ๋ ๋ฐฐ์ด: [1, 1, 1, 1, 1, 2, 2, 6, 6, 7, 8, 43]
๋ด๋ถ ๋ฃจํ (์ด๋ก์์ผ๋ก ๊ฐ์กฐ๋จ)๋ ์์๋ฅผ ์ค๋ฅธ์ชฝ ์ด์๊ณผ ๋น๊ตํด. ๊ทธ๋ฆฌ๊ณ ํ์ํ๋ค๋ฉด ์์น๋ฅผ ๋ฐ๊ฟ.
๋ฒ์ 2:
์ฒซ ๋ฒ์งธ ์ํ ํ์ ๊ฐ์ฅ ํฐ ์์๊ฐ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์นํ๊ฒ ๋๋๊น, ๋ค์ ์ํ์์๋ ์ด ์์๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋ผ.
๋ ๋ฒ์งธ ์ํ ํ์๋ ์ค๋ฅธ์ชฝ์ ์ต๋ ๋ ๊ฐ์ ํฐ ์์๊ฐ ์๊ฒ ๋๋๊น,
๋ด๋ถ ๋ฃจํ๋ n - 1
๊น์ง๊ฐ ์๋๋ผ n - 1 - i
๊น์ง ์งํํด. ์ฌ๊ธฐ์ i
๋ ์ธ๋ถ ๋ฃจํ์
์งํ๋ ํ์๋ฅผ ์๋ฏธํด.
์ ๋ฒ์ ์ ์ด๋ ๊ฒ ์๊ฒผ์ด:
array = [6, 43, 2, 1, 2, 1, 1, 1, 1, 6, 7, 8]
n = len(array)
for i in range(n):
for j in range(n - 1 - i):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j] # ์์ ๊ตํ
print("์ ๋ ฌ๋ ๋ฐฐ์ด:", array)
# ์ถ๋ ฅ: ์ ๋ ฌ๋ ๋ฐฐ์ด: [1, 1, 1, 1, 1, 2, 2, 6, 6, 7, 8, 43]
๋ฒ์ 3:
๋ฐฐ์ด์ด ์ด๋ฏธ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์์ ์๋ ์์ด. ๊ทธ๋์ ์ด๋ฐ ์ต์ ํ๋ฅผ ์ถ๊ฐํ ์ ์์ด: ๋ง์ฝ ๋ด๋ถ ๋ฃจํ๊ฐ ๋ชจ๋ ์์๋ฅผ ์ํํ์ง๋ง ๋จ ํ๋์ ๊ตํ๋ ์์๋ค๋ฉด, ์ ๋ ฌ์ด ์๋ฃ๋ ๊ฑฐ์ผ.
์ด๋ฒ ๋ฒ์ ์์๋ swapped
๋ณ์๋ก ๋ง์ง๋ง ์ํ์์ ์์์ ๊ตํ์ด ๋ฐ์ํ๋์ง๋ฅผ ์ถ์ ํด.
๋ง์ฝ ๋ฐฐ์ด์ ์ํํ ํ ๊ตํ์ด ํ๋๋ ๋ฐ์ํ์ง ์์๋ค๋ฉด, ๋ฐฐ์ด์ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ๋ผ๋ ๊ฒ์ ์๋ฏธํ๊ณ ,
์ถ๊ฐ์ ์ธ ์ํ๋ฅผ ์ํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ด โ ์ด๊ฑด ์ ๋ ฌ์ ๋์์ด ๋์ง ์๊ฑฐ๋ . ๋ฐ๋ผ์, swapped
๋ณ์๋ ๊ฑฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์๊ณ ๋ฆฌ์ฆ์ ์คํ์ ํฌ๊ฒ ๋น ๋ฅด๊ฒ ํด์ค, ์กฐ๊ธฐ ์ข
๋ฃํ๋ฉด์ ๋ง์ด์ง.
Python์์์ ๋ฒ๋ธ ์ ๋ ฌ ๊ตฌํ:
def bubble_sort(array):
n = len(array)
for i in range(n):
swapped = False # ์ต์ ํ: ๊ตํ์ด ๋ฐ์ํ๋์ง ๊ฒ์ฌ
for j in range(0, n - i - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j] # ์์ ๊ตํ
swapped = True
if not swapped:
break # ๊ตํ์ด ์์๋ค๋ฉด, ๋ฐฐ์ด์ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ
return array
# ์ฌ์ฉ ์์ :
array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = bubble_sort(array)
print("์ ๋ ฌ๋ ๋ฐฐ์ด:", sorted_array)
# ์ถ๋ ฅ: ์ ๋ ฌ๋ ๋ฐฐ์ด: [11, 12, 22, 25, 34, 64, 90]
GO TO FULL VERSION