Pseudo-code ์ค๋ช
์๋ Selection Sort(์ ํ์ ๋ ฌ)์ pseudo-์ฝ๋์ด๋ค. i๊ฐ 1๋ถํฐ ์์ํ์ง๋ง, ๊ฐ์ฅ ์ฒซ Index๋ฅผ ์๋ฏธํ๊ณ ํ๋ก๊ทธ๋จ์ ํ ๋๋ 0 index์ด๋ค. ์๊ณ ๋ฆฌ์ฆ์ ๋งค iteration๋ง๋ค 2๊ฐ์ง ๋์์ ์ํํ๋ค. list๋ด์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๊ณ list์์๋ค ์ ๋ ฌํ๋ค. ๊ทธ ๋ค์์ ์ ๋ ฌ๋ ๊ฐ๋ณด๋ค ํ๋ ํฐ ๊ฐ์์ ๋ค์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ค.
๊ธ๋ก ํ์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
- min์ด๋ ๋ณ์์ i๋ฅผ ์ ์ฅํ๋ค.
- j์๋ i +1 ๊ฐ์ ๋์ ํ๋ค.
- j๋ถํฐ list ๋๊น์ง ์ดํด๋ณด๋ฉด์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๊ณ ๊ทธ index๋ฅผ min์ ์ ์ฅํ๋ค.
- ๋ง์ฝ min ๊ฐ์ด ๋ฐ๋์๋ค๋ฉด i ์๋ฆฌ์ item๊ณผ min ์๋ฆฌ์ item์ ๋ฐ๊พผ๋ค.
- i += 1์ ํ๊ณ 1๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
ํ iteration์ list๋ด์ ๋ชจ๋ item์ ์ดํด๋ณด๊ณ , ์ด๋ฌํ ๊ณผ์ ์ list์ ๊ธธ์ด๋งํผ ์งํํ๊ธฐ ๋๋ฌธ์ ์ด sorting algorithm์ ์๊ฐ ๋ณต์ก๋๋ `O(n^2)`๊ฐ ๋๋ ๊ฒ์ด๋ค. iteration ์๋ ์ธ์ ๋ ist ๊ธธ์ด์ ๊ฐ๊ธฐ ๋๋ฌธ์ average์ worst case์์์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฐ๋ค.
source: stackoverflowselectionsort
iteration ๊ณผ์ ์ ๊ฐ๋จํ ์ดํด๋ณด์
์ฒซ๋ฒ์งธ iteration์์๋ 7๋ถํฐ ์์ํด์ list ์ ์ฒด๋ฅผ ํ๊ณ 1์ด ์ ์ผ ์์ ๊ฒ์ ํ์ ํ๊ณ 1์ ๋งจ ์์ ์์นํ๋ค.
๋๋ฒ์งธ iteration์์๋ 1์ ์ ์ธํ๊ณ ๊ทธ ๋ค์ item์ธ 4๋ถํฐ ์์ํด์ list ์ ์ฒด๋ฅผ ํ๊ณ 2๊ฐ ์ ์ผ ์์์ ํ์ ํ๋ค. ๊ทธ๋์ 2๋ฅผ 1 ๋ค์์ ์์นํ๋ค.
์ธ๋ฒ์งธ iteration์์๋ 1,2๋ฅผ ์ ์ธํ๊ณ ๊ทธ ๋ค์ item์ธ 5๋ถํฐ ์์ํด์ list ์ ์ฒด๋ฅผ ํ๊ณ 4๊ฐ ์ ์ผ ์์์ ํ์ ํ๋ค. ๊ทธ๋์ 1, 2 ๋ค์์ 4๋ฅผ ๋๋ค.
...
iteration์ list์ item๋ณด๋ค ํ๋ ์์ ์ ๋งํผ ๋ฐ๋ณต์ ํ๋ฉด โ ๋ฆฌ์คํธ๊ฐ ์ ๋ ฌ์ด ๋๋ค.
Python Code
import random
def selection_sort(num):
for i in range(len(num)):
minimum = i
for j in range(i+1, len(num)): # i๋ณด๋ค ํ๋ ํฐ ์๋ถํฐ list๋๊น์ง iterateํ๋ค
if num[j] < num[minimum]:
minimum = j # list๋ด์ ์ ์ผ ์์ ์ซ์๋ฅผ ์ฐพ๊ณ ๊ทธ index๋ฅผ minumum ๋ณ์์ ์ ์ฅํ๋ค
if minimum != i:
num[i], num[minimum] = num[minimum], num[i]
return num
number = [i for i in range(10)]
random.shuffle(number)
selection = selection_sort(number)
print(selection)