์๋ฃ๊ตฌ์กฐ/๐์๊ณ ๋ฆฌ์ฆ - 10
ํ์ต๊ธฐ๋ก
์ค๋ ๋ค์ ๊ฐ์ ๋ชฉ๋ก
- ์ ํ์ ๋ ฌ
- ์ฝ์ ์ ๋ ฌ
์ ํ์ ๋ ฌ(Selection Sort)
์ต์๊ฐ์ ํ์ํด์ ๋งจ ์ ๊ฐ๊ณผ ๊ต์ฒดํ๋ ๊ฒ์ ๋ฐ๋ณตํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ฒซ๋ฒ์งธ ๊ฐ๋ถํฐ ์ต์๊ฐ์ ์ฐพ๋๋ค.
- ์ต์๊ฐ๊ณผ ์ฒซ๋ฒ์งธ ๊ฐ์ ์ค์ํ๋ค.
-
์ฒซ๋ฒ์งธ ๊ฐ(์ต์๊ฐ)์ ์ ์ธํ๊ณ 1, 2๋ฒ์ ๋ฐ๋ณตํ๋ค.(๋ง์ง๋ง์์ ๊ฐ์ด ์ฒซ๋ฒ์งธ ๊ฐ์ด ๋ ๋๊น์ง)
- i๋ฅผ 0์ผ๋ก ์ด๊ธฐํ์ํจ๋ค.(i๋ ์ฒ์ ๊ฐ์ ๋ปํ๋ค. ์ฌ์ดํด๋ก ๋ด๋ ๋ฌด๋ฐฉ)
- i๋ฒ์งธ ๊ฐ๋ถํฐ ์ต์๊ฐ์ ์ฐพ๋๋ค.
- ์ต์๊ฐ๊ณผ i๋ฒ์งธ ๊ฐ์ ์ค์ํ๋ค.
- i๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- 1,2,3,4๋ฅผ n-1๋ฒ ๋ฐ๋ณตํ๋ค.(n์ ๊ฐ์ ๊ฐฏ์)
์ ํ์ ๋ ฌ ์์
3 5 -> ํ์ ์ธ๋ฑ์ค : 0, ์ต์๊ฐ : 3 3 5 -> ํ์ ์ธ๋ฑ์ค : 1, ์ต์๊ฐ : 5, ์ค์(3, 3) 3 5 -> ๋ง์ง๋ง ๊ฐ์
5 4 3 -> ํ์ ์ธ๋ฑ์ค : 0, ์ต์๊ฐ : 5 5 4 3 -> ํ์ ์ธ๋ฑ์ค : 1, ์ต์๊ฐ : 4 5 4 3 -> ํ์ ์ธ๋ฑ์ค : 2, ์ต์๊ฐ : 3, ์ค์(5, 3) 3 4 5 -> ํ์ ์ธ๋ฑ์ค : 1, ์ต์๊ฐ : 4 3 4 5 -> ํ์ ์ธ๋ฑ์ค : 2, ์ต์๊ฐ : 4, ์ค์(4, 4)
์ ํ์ ๋ ฌ ๊ตฌํ
import random
def checkSortFunc(func):
isSorted = False
for i in range(0, 10):
list = random.sample(range(50), 10)
func(list)
for i in range(0, len(list)-1):
if list[i] > list[i + 1]:
isSorted = True
return False
return True
def SelectionSort(list):
for i in range(0, len(list)-1):
min = i
for j in range(i, len(list)):
if list[min] > list[j]:
min = j
list[i], list[min] = list[min], list[i]
print(checkSortFunc(SelectionSort))
์คํ๊ฒฐ๊ณผ๋ ๋น์ฐํ True, ์ฑ๊ณต์ ์ผ๋ก ์ ๋ ฌ๋์๋ค.
checkSortFunc๋ ์ ๋ ฌํ๋ ํจ์๋ฅผ ํ
์คํธํ๊ธฐ ์ํ ํจ์,
์ ์์ ์ผ๋ก ์ ๋ ฌ๋๋ฉด True,
๋น์ ์์ ์ผ๋ก ์ ๋ ฌ๋๋ฉด False๋ฅผ ๋ฐํํ๋ค.
์๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋๋ก ํจ์๋ฅผ ๋ณ๊ฒฝํ๊ณ ์คํํ ๊ฒฐ๊ณผ
์ ํ์ ๋ ฌ ์๊ฐ๋ณต์ก๋
๋ฒ๋ธ์ํธ์ฒ๋ผ $n(n-1)\over2$๊ฐ ๋๊ฒ ์ง๋ง
๋น
์ค ํ๊ธฐ๋ฒ์ ๋ฐ๋ผ์ $O(n^2)$์ด ๋๋ค.
์ฝ์ ์ ๋ ฌ(Insertion Sort)
๊ฐ์ ์ฌ๋ฐ๋ฅธ ์์น์ ์ฝ์ ํ๋ฉด์ ์ ๋ ฌํ๋ค.
- ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ค.(๋งจ ์ฒ์ ๋ฐ์ดํฐ๋ ์๋ ๊ณผ์ ์ ๊ฑฐ์ณ๋ ๊ฐ์ ์์น์, ๋ฐ๋ผ์ ๋๋ฒ์งธ ๋ฐ์ดํฐ๋ถํฐ ์คํ)
- ์ ํํ ๋ฐ์ดํฐ์ ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ ์๋ค๋ฉด ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ก ๋ฏผ๋ค.
- ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ ํด๋๊น์ง 2๋ฅผ ๋ฐ๋ณตํ๋ค.
- ๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด์ ์๊ธด ๊ณต๊ฐ์ ์ ํํ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค.
- ๋ง์ง๋ง ๋ฐ์ดํฐ๊น์ง 1~4๋ฅผ ๋ฐ๋ณตํ๋ค.
์ฝ์ ์ ๋ ฌ ๊ตฌํ
def InsertionSort(list):
for i in range(1, len(list)):
data = i
for j in range(i - 1, -1, -1):
if list[j] > list[data]:
list[j], list[data] = list[data], list[j]
data = j
else:
break
์ฝ์
์ ๋ ฌ ์คํ ๊ฒฐ๊ณผ
์ถ๊ฐ๋ก checkSortFunc ๊ฐ์ (์ ๋ ฌ ์คํจ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ ์ถ๋ ฅ)
def checkSortFunc(func):
isSorted = False
for i in range(0, 10):
list = random.sample(range(50), 10)
func(list)
for i in range(0, len(list)-1):
if list[i] > list[i + 1]:
print(list)#๋ฆฌ์คํธ ์ถ๋ ฅํ๋๋ก ๊ฐ์
return False
return True
๋ง์ง๋ง
9๋ฒ์งธ ์ฑ๋ฆฐ์ง์ ์คํจํ๋ค๋ ๋ฉ์ผ์ด ์๋ค.
ํน์๋ ์ถ์ด์ ๊นํ์ ๋ค์ด๊ฐ์ ์ปค๋ฐ ์๊ฐ์ ๋ดค๋๋ฐ 11์ ์ฏค์ธ๊ฒ ๊ฐ์๋ฐ,
๊ณ์ ์ด์ด์ก์ผ๋ฉด ์ข๊ฒ ๋ค.
์ด์ด์ง์ง ์๋๋ผ๋ ๊ณ์ 50์ผ๊ฐ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ฌ์ผ์ง.
์์ ใ
ใ
๋๊ธ๋จ๊ธฐ๊ธฐ