์ ๋ ฌ (Sorting) ?
- ์ด๋ค ๋ฐ์ดํฐ๋ค์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ ํด์ง ์์๋๋ก ๋์ดํ๋ ๊ฒ
- ์ ๋ ฌ์ ํ๋ก๊ทธ๋จ ์์ฑ ์, ๋น๋ฒํ๊ฒ ํ์
- ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ๊ณ ์๋์์ผ๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ ํ์ต์ ํ์
๋ฒ๋ธ ์ ๋ ฌ(bubble sort)
: ๋ ์ธ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์, ์์์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์์๋ ๋ฐ์ดํฐ๋ณด๋ค ํฌ๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ
def bubblesort(data):
for index in range(len(data) - 1 ):
swap = False
for index2 in range(len(data) - index - 1):
if data[index2] > data[index2 + 1]:
data[index2], data[index2 + 1] = data[index2 + 1], data[index2]
swap = True
if swap == False:
break
return data
์ฝ์ ์ ๋ ฌ(insertion sort)
- ์ฝ์ ์ ๋ ฌ์ ๋ ๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ์์
- ํด๋น ์ธ๋ฑ์ค(key ๊ฐ) ์์ ์๋ ๋ฐ์ดํฐ(B) ๋ถํฐ ๋น๊ตํด์ key๊ฐ์ด ๋ ์์ผ๋ฉด, B๊ฐ์ ๋ค ์ธ๋ฑ์ค๋ก ๋ณต์ฌ
- ์ด๋ฅผ key๊ฐ์ด ๋ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋๊น์ง ๋ฐ๋ณต, ๊ทธ๋ฆฌ๊ณ ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ์์น ๋ฐ๋ก ๋ค์ key๊ฐ์ ์ด๋
def insertion_sort(data):
for index in range(len(data) - 1 ):
for index2 in range(index + 1, 0, -1):
if data[index2] < data[index2 - 1]:
data[index2], data[index2 - 1] = data[index2 - 1], data[index2]
else:
break
return data
์ ํ ์ ๋ ฌ(selection sort)
: ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ฃผ์ด์ง ๋ฐ์ดํฐ ์ค, ์ต์๊ฐ์ ์ฐพ์
- ํด๋น ์ต์๊ฐ์ ๋ฐ์ดํฐ ๋งจ ์์ ์์นํ ๊ฐ๊ณผ ๊ต์ฒด
- ๋งจ ์์ ์์น๋ฅผ ๋บ ๋๋จธ์ง ๋ฐ์ดํฐ๋ฅผ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๋ณต
def selection_sort(data):
for stand in range(len(data) - 1):
lowest = stand
for index in range(stand + 1, len(data)):
if data[lowest] > data[index]:
lowest = index
data[lowest], data[stand] = data[stand], data[lowest]
return data
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋์ ๊ณํ๋ฒ( Dynamic Programming) ๊ณผ ๋ถํ ์ ๋ณต(Divide Conquer) (0) | 2024.02.05 |
---|---|
[Algorithm] ์ฌ๊ท ์ฉ๋ฒ (recursive call, ์ฌ๊ท ํธ์ถ) (0) | 2024.01.30 |
[Data Structure] ํ (Heap)์ ๊ตฌํ - ํ๊ณผ ๋ฐฐ์ด (1) | 2024.01.30 |
[Data Structure] ํ (Heap) (0) | 2024.01.29 |
[Data Structure] ํธ๋ฆฌ (Tree) (0) | 2024.01.29 |