ํต์ ๋ ฌ(Quick Sort)์ ๋น๊ต ๊ธฐ๋ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก, ๋ฐ์ดํฐ์ ๋ถํ ๋ฐ ์ ๋ณต ๊ธฐ๋ฒ์ ์ด์ฉํด ํจ์จ์ ์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ์ด ๊ธ์์๋ ํต์ ๋ ฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ํ์ด์ฌ ์์ ๋ฅผ ํตํด ์ดํดํ๊ณ , ๋ค์ํ ์ต์ ํ ๋ฐฉ๋ฒ๊น์ง ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
โฃ ๋ชฉ์ฐจ
01. ํต์ ๋ ฌ์ ๊ฐ๋ ๐
ํต์ ๋ ฌ(Quick Sort)์ ๋น๊ต ๊ธฐ๋ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก, ํ๊ท ์ ์ผ๋ก ๋งค์ฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํต์ ๋ ฌ์ ๋ถํ ์ ๋ณต(Divide and Conquer) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ์ ๋ ฌํฉ๋๋ค. ํต์ ๋ ฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ธฐ์ค ์ ํ (Pivot Selection): ๋ฐฐ์ด์์ ํ๋์ ์์๋ฅผ ์ ํํ์ฌ ๊ธฐ์ค์ (Pivot)์ผ๋ก ์ผ์ต๋๋ค. ์ด ๊ธฐ์ค์ ์ ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ถํ (Partitioning): ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค. ๊ธฐ์ค์ ๋ณด๋ค ์์ ๊ฐ๋ค์ ๊ธฐ์ค์ ์ ์ผ์ชฝ์, ํฐ ๊ฐ๋ค์ ์ค๋ฅธ์ชฝ์ ์์นํ๋๋ก ์ฌ๋ฐฐ์ดํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๊ธฐ์ค์ ์ ์ต์ข ์์น์ ๋์ด๊ฒ ๋ฉ๋๋ค.
- ์ฌ๊ท์ ์ ๋ ฌ (Recursive Sort): ๊ธฐ์ค์ ์ ์ ์ธํ ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ํต์ ๋ ฌ์ ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 1 ์ดํ๊ฐ ๋ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
ํต์ ๋ ฌ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐฐ์ด์์ ๊ธฐ์ค์ (Pivot)์ ์ ํํฉ๋๋ค.
- ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค.
- ์ผ์ชฝ ๋ถ๋ถ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ ๊ฐ๊ฐ ๋ค์ ํต์ ๋ ฌํฉ๋๋ค.
- ๋ชจ๋ ๋ถ๋ถ ๋ฐฐ์ด์ด ์ ๋ ฌ๋๋ฉด ์ ์ฒด ๋ฐฐ์ด์ด ์ ๋ ฌ๋ฉ๋๋ค.
ํต์ ๋ ฌ์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์ฅ์
- ํ๊ท ์๊ฐ ๋ณต์ก๋: O(n log n)์ผ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- ์ ์๋ฆฌ ์ ๋ ฌ: ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ต๋๋ค(์ฌ๊ท ํธ์ถ์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ธํ๋ฉด).
๋จ์
- ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋: O(n²)๋ก, ๋ฐฐ์ด์ด ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๊ฑฐ๋ ๋ชจ๋ ์์๊ฐ ๋์ผํ ๊ฒฝ์ฐ์ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ถ์์ ์ ๋ ฌ: ๋์ผํ ๊ฐ์ ์์๋ค์ ์๋์ ์ธ ์์๊ฐ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
02. ํต์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋จ๊ณ๋ณ ์ค๋ช ๐
ํต์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋จ๊ณ๋ณ ์ค๋ช ์ ์ํด, ์์ ๋ฐฐ์ด [3, 6, 8, 10, 1, 2, 1]์ ์ฌ์ฉํ์ฌ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1. ๊ธฐ์ค์ ์ ํ (Pivot Selection)
๋จผ์ , ๋ฐฐ์ด์์ ๊ธฐ์ค์ ์ ์ ํํฉ๋๋ค. ๋ณดํต ์ฒซ ๋ฒ์งธ ์์, ๋ง์ง๋ง ์์, ์ค๊ฐ ์์, ๋๋ ๋ฌด์์๋ก ์ ํ๋ ์์๋ฅผ ๊ธฐ์ค์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด ์์ ์์๋ ์ฒซ ๋ฒ์งธ ์์ 3์ ๊ธฐ์ค์ ์ผ๋ก ์ ํํ๊ฒ ์ต๋๋ค.
2. ๋ถํ (Partitioning)
๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค. ๊ธฐ์ค์ ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ผ์ชฝ์, ํฐ ๊ฐ๋ค์ ์ค๋ฅธ์ชฝ์ ์์นํ๋๋ก ์ฌ๋ฐฐ์ดํฉ๋๋ค. ์ด ๊ณผ์ ์ ํตํด ๊ธฐ์ค์ ์ ์ต์ข ์์น์ ๋์ด๊ฒ ๋ฉ๋๋ค.
๋ถํ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐฐ์ด: [3, 6, 8, 10, 1, 2, 1]
- ๊ธฐ์ค์ : 3
์ผ์ชฝ๋ถํฐ ์์ํ์ฌ ๊ธฐ์ค์ ๋ณด๋ค ํฐ ๊ฐ์ ์ฐพ๊ณ , ์ค๋ฅธ์ชฝ๋ถํฐ ์์ํ์ฌ ๊ธฐ์ค์ ๋ณด๋ค ์์ ๊ฐ์ ์ฐพ์ต๋๋ค. ๋ ๊ฐ์ ๊ตํํฉ๋๋ค.
- ์ด๊ธฐ ์ํ: [3, 6, 8, 10, 1, 2, 1]
- 6 (๊ธฐ์ค์ ๋ณด๋ค ํผ)๊ณผ 1 (๊ธฐ์ค์ ๋ณด๋ค ์์)์ ๊ตํ: [3, 1, 8, 10, 1, 2, 6]
- 8 (๊ธฐ์ค์ ๋ณด๋ค ํผ)๊ณผ 2 (๊ธฐ์ค์ ๋ณด๋ค ์์)์ ๊ตํ: [3, 1, 2, 10, 1, 8, 6]
- 10 (๊ธฐ์ค์ ๋ณด๋ค ํผ)๊ณผ 1 (๊ธฐ์ค์ ๋ณด๋ค ์์)์ ๊ตํ: [3, 1, 2, 1, 10, 8, 6]
- ์ต์ข ์ํ: [1, 1, 2, 3, 10, 8, 6]
์ด์ 3์ ๋ฐฐ์ด์ ๋ค ๋ฒ์งธ ์์น์ ์์ผ๋ฉฐ, ์ผ์ชฝ์๋ 3๋ณด๋ค ์์ ๊ฐ๋ค, ์ค๋ฅธ์ชฝ์๋ 3๋ณด๋ค ํฐ ๊ฐ๋ค์ด ์์นํฉ๋๋ค.
3. ์ฌ๊ท์ ์ ๋ ฌ (Recursive Sort)
๊ธฐ์ค์ ์ ์ ์ธํ ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ํต์ ๋ ฌ์ ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค.
์ผ์ชฝ ๋ถ๋ถ ๋ฐฐ์ด [1, 1, 2]
- ๊ธฐ์ค์ : 1
- [1, 1, 2]๋ ์ด๋ฏธ 1๋ณด๋ค ์์ ๊ฐ๊ณผ ํฐ ๊ฐ์ผ๋ก ๋ถํ ๋์ด ์์ต๋๋ค.
- ๋ค์ ๋ถํ :
- [1] (๊ธฐ์ค์ ๋ณด๋ค ์์)๊ณผ [2] (๊ธฐ์ค์ ๋ณด๋ค ํผ)
- ์ต์ข ์ ๋ ฌ: [1, 1, 2]
์ค๋ฅธ์ชฝ ๋ถ๋ถ ๋ฐฐ์ด [10, 8, 6]
- ๊ธฐ์ค์ : 10
- [10, 8, 6]์ ์ด๋ฏธ 10๋ณด๋ค ์์ ๊ฐ๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ๋ค์ ๋ถํ : [8, 6] (๊ธฐ์ค์ ๋ณด๋ค ์์)
- ์ต์ข ์ ๋ ฌ: [6, 8, 10]
4. ์ต์ข ์ ๋ ฌ
๋ชจ๋ ๋ถ๋ถ ๋ฐฐ์ด์ด ์ ๋ ฌ๋๋ฉด ์ ์ฒด ๋ฐฐ์ด์ด ์ ๋ ฌ๋ฉ๋๋ค. ์ต์ข ๋ฐฐ์ด์ [1, 1, 2, 3, 6, 8, 10]์ ๋๋ค.
์์ฝ
- ๊ธฐ์ค์ ์ ์ ํํฉ๋๋ค.
- ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋ถํ ํฉ๋๋ค.
- ๊ฐ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ํต์ ๋ ฌ์ ์ํํฉ๋๋ค.
- ๋ชจ๋ ๋ถ๋ถ ๋ฐฐ์ด์ด ์ ๋ ฌ๋๋ฉด ์ ์ฒด ๋ฐฐ์ด์ด ์ ๋ ฌ๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ์๊ฐ์ ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
[3, 6, 8, 10, 1, 2, 1] --๊ธฐ์ค์ : 3-->
[1, 1, 2, 3, 10, 8, 6]
[1, 1, 2] --๊ธฐ์ค์ : 1--> [1, 1, 2] [10, 8, 6] --๊ธฐ์ค์ : 10--> [6, 8, 10]
์ต์ข
๋ฐฐ์ด: [1, 1, 2, 3, 6, 8, 10]
03. ํ์ด์ฌ์ผ๋ก ํต์ ๋ ฌ ๊ตฌํํ๊ธฐ๐
๋ค์์ ํ์ด์ฌ์ผ๋ก ํต์ ๋ ฌ์ ๊ตฌํํ ์์ ์ ๋๋ค.
def median_of_three(arr):
# ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ, ์ค๊ฐ, ๋ง์ง๋ง ์์๋ฅผ ์ ํํฉ๋๋ค.
first = arr[0]
middle = arr[len(arr) // 2]
last = arr[-1]
# ์ธ ์์๋ฅผ ์ ๋ ฌํ์ฌ ์ค์๊ฐ์ ๋ฐํํฉ๋๋ค.
return sorted([first, middle, last])[1]
def optimized_quicksort(arr):
# ๊ธฐ๋ณธ ์ฌ๋ก: ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1 ์ดํ์ธ ๊ฒฝ์ฐ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
if len(arr) <= 1:
return arr
# ๊ธฐ์ค์ ์ median_of_three ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํฉ๋๋ค.
pivot = median_of_three(arr)
# ๊ธฐ์ค์ ๋ณด๋ค ์์ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
left = [x for x in arr if x < pivot]
# ๊ธฐ์ค์ ๊ณผ ๋์ผํ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
middle = [x for x in arr if x == pivot]
# ๊ธฐ์ค์ ๋ณด๋ค ํฐ ์์๋ค๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
right = [x for x in arr if x > pivot]
# ์ฌ๊ท์ ์ผ๋ก ๊ฐ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๊ณ , ๊ฒฐํฉํ์ฌ ์ต์ข
์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
return optimized_quicksort(left) + middle + optimized_quicksort(right)
# ์์ ๋ฐฐ์ด
arr = [3, 6, 8, 10, 1, 2, 1]
# ์ต์ ํ๋ ํต์ ๋ ฌ์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
sorted_arr = optimized_quicksort(arr)
print(sorted_arr)
์ฝ๋ ์ค๋ช :
1. median_of_three ํจ์:
- ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์ (first), ์ค๊ฐ ์์ (middle), ๋ง์ง๋ง ์์ (last)๋ฅผ ์ ํํฉ๋๋ค.
- ์ด ์ธ ์์๋ฅผ ์ ๋ ฌํ์ฌ ์ค์๊ฐ์ ๋ฐํํฉ๋๋ค. ์ด ์ค์๊ฐ์ด ํต์ ๋ ฌ์ ๊ธฐ์ค์ ์ด ๋ฉ๋๋ค.
2. optimized_quicksort ํจ์:
- ๊ธฐ๋ณธ ์ฌ๋ก ์ฒ๋ฆฌ: ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1 ์ดํ์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ด ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค.
- ๊ธฐ์ค์ ์ ํ: median_of_three ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์ค์ ์ ์ ํํฉ๋๋ค.
- ๋ถํ :
- left ๋ฆฌ์คํธ: ๊ธฐ์ค์ ๋ณด๋ค ์์ ์์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ.
- middle ๋ฆฌ์คํธ: ๊ธฐ์ค์ ๊ณผ ๋์ผํ ์์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ.
- right ๋ฆฌ์คํธ: ๊ธฐ์ค์ ๋ณด๋ค ํฐ ์์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์คํธ. - ์ฌ๊ท์ ํธ์ถ: left์ right ๋ฆฌ์คํธ์ ๋ํด ์ฌ๊ท์ ์ผ๋ก optimized_quicksort ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ๊ฐ์ ์ ๋ ฌํฉ๋๋ค.
- ๊ฒฐํฉ: ์ ๋ ฌ๋ left ๋ฆฌ์คํธ, middle ๋ฆฌ์คํธ, ์ ๋ ฌ๋ right ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํฉํ์ฌ ์ต์ข ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
04. ํต์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋โฑ
ํต์ ๋ ฌ(Quick Sort)์ ์๊ฐ ๋ณต์ก๋๋ ํผ๋ฒ(pivot) ์ ํ๊ณผ ๋ฐฐ์ด ๋ถํ ์ด ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ํต์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ ํ๊ท ์ ์ผ๋ก ๋งค์ฐ ํจ์จ์ ์ด์ง๋ง, ์ต์ ์ ๊ฒฝ์ฐ์๋ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. ์ด๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๊ท ์๊ฐ ๋ณต์ก๋: O(n log n)
ํต์ ๋ ฌ์ ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(n log n)์ ๋๋ค. ์ด๋ ๋ฐฐ์ด์ด ๋๋ค ํ๊ฒ ๋ถํฌ๋์ด ์์ ๋, ๊ฐ ๋ถํ ๋จ๊ณ์์ ๋ฐฐ์ด์ด ๋๋ต ์ ๋ฐ์ฉ ๋๋์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
- ๋ถํ ๋จ๊ณ: ๊ฐ ๋จ๊ณ์์ ๋ฐฐ์ด์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ค.
- ์ฌ๊ท ํธ์ถ: ๋๋ ์ง ๋ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ํต์ ๋ ฌ์ ์ํํฉ๋๋ค.
- ๋ถํ ์ ๊น์ด: ๋ฐฐ์ด์ด ์ ๋ฐ์ฉ ๋๋๋ฏ๋ก, ๋ถํ ์ ๊น์ด๋ log n ๋จ๊ณ๊ฐ ๋ฉ๋๋ค.
- ๊ฐ ๋จ๊ณ์ ์์ ๋: ๊ฐ ๋จ๊ณ์์ ๋ชจ๋ ์์๋ฅผ ํ ๋ฒ์ฉ ๋น๊ตํ๋ฏ๋ก, ๊ฐ ๋จ๊ณ์ ์์ ๋์ O(n) ์ ๋๋ค.
๋ฐ๋ผ์, ํ๊ท ์ ์ผ๋ก log n ๋จ๊ณ์์ ๊ฐ ๋จ๊ณ๋ง๋ค O(n)์ ์์ ๋์ด ํ์ํ์ฌ ์ด ์๊ฐ ๋ณต์ก๋๋ O(n log n) ์ด ๋ฉ๋๋ค.
์ต์ ์๊ฐ ๋ณต์ก๋: O(n²)
ํต์ ๋ ฌ์ ์ต์ ์๊ฐ ๋ณต์ก๋๋ O(n²)์ ๋๋ค. ์ด๋ ํผ๋ฒ ์ ํ์ด ํญ์ ์ต์ ์ ๊ฒฝ์ฐ(์: ๊ฐ์ฅ ์์ ๊ฐ ๋๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ํผ๋ฒ์ผ๋ก ์ ํ)๋ก ์ด๋ฃจ์ด์ง ๋ ๋ฐ์ํฉ๋๋ค.
- ๋ถํ ๋จ๊ณ: ๊ฐ ๋จ๊ณ์์ ๋ฐฐ์ด์ด ํ์ชฝ์ผ๋ก๋ง ์น์ฐ์น๊ฒ ๋๋ฉ๋๋ค.
- ์ฌ๊ท ํธ์ถ: ํ์ชฝ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ๊ณ์ ์ค์ด๋ค์ง๋ง, ๋ค๋ฅธ ์ชฝ ๋ฐฐ์ด์ ๊ฑฐ์ ์๋ ํฌ๊ธฐ์ ๋์ผํ๊ฒ ์ ์ง๋ฉ๋๋ค.
- ๋ถํ ์ ๊น์ด: ์ด ๊ฒฝ์ฐ ๋ถํ ์ ๊น์ด๋ ์ต๋ n ๋จ๊ณ๊ฐ ๋ฉ๋๋ค.
- ๊ฐ ๋จ๊ณ์ ์์ ๋: ๊ฐ ๋จ๊ณ์์ ๋ชจ๋ ์์๋ฅผ ํ ๋ฒ์ฉ ๋น๊ตํ๋ฏ๋ก, ๊ฐ ๋จ๊ณ์ ์์ ๋์ O(n)์ ๋๋ค.
๋ฐ๋ผ์, ์ต์ ์ ๊ฒฝ์ฐ n ๋จ๊ณ์์ ๊ฐ ๋จ๊ณ๋ง๋ค O(n)์ ์์ ๋์ด ํ์ํ์ฌ ์ด ์๊ฐ ๋ณต์ก๋๋ O(n²) ์ด ๋ฉ๋๋ค.
์ต์ ์๊ฐ ๋ณต์ก๋: O(n log n)
ํต์ ๋ ฌ์ ์ต์ ์๊ฐ ๋ณต์ก๋๋ O(n log n)์ ๋๋ค. ์ด๋ ํผ๋ฒ ์ ํ์ด ํญ์ ๋ฐฐ์ด์ ์ ํํ ๋ฐ์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ๋ ํ๊ท ์๊ฐ ๋ณต์ก๋์ ๋์ผํฉ๋๋ค.
๊ณต๊ฐ ๋ณต์ก๋
ํต์ ๋ ฌ์ ๊ณต๊ฐ ๋ณต์ก๋๋ ์ผ๋ฐ์ ์ผ๋ก O(log n) ์ ๋๋ค. ์ด๋ ์ฌ๊ท ํธ์ถ ์คํ์ ๊น์ด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ, ์ต์ ์ ๊ฒฝ์ฐ O(n) ์ด ๋ ์ ์์ต๋๋ค.
- ํ๊ท ๋ฐ ์ต์ ์ ๊ฒฝ์ฐ: O(log n) (์ฌ๊ท ํธ์ถ ์คํ์ ๊น์ด๊ฐ logโก n ์ด๊ธฐ ๋๋ฌธ).
- ์ต์ ์ ๊ฒฝ์ฐ: O(n) (์ฌ๊ท ํธ์ถ ์คํ์ ๊น์ด๊ฐ ์ต๋ n ์ด๊ธฐ ๋๋ฌธ).
๊ฒฐ๋ก
- ํ๊ท ์๊ฐ ๋ณต์ก๋: O(n log n)
- ์ต์ ์๊ฐ ๋ณต์ก๋: O(n²)
- ์ต์ ์๊ฐ ๋ณต์ก๋: O(n log n)
- ๊ณต๊ฐ ๋ณต์ก๋: ํ๊ท ์ ์ผ๋ก O(log โกn), ์ต์ ์ ๊ฒฝ์ฐ O(n)