2021. 9. 7. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๊ณ ๋ฆฌ์ฆ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ์์ Bubble Sort์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ๋ ๊ฒ์ด์์.
์์ค ์ฝ๋์ ๋ํด์ ํ์ธ ํ๊ณ ์ถ์ผ์ ๋ถ๋ค๊ป์๋ ์ฃผ๋ํ๋์ Git hub์ ๊ด์ฌ์ ์ฃผ์ธ์!
๐ Sorting (์ ๋ ฌ)์ด๋?
์ ๋ ฌ์ ์ด๋ค Data๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ ํด์ง ์์๋๋ก ๋์ดํ๋ ๊ฒ์ด์์.
์ ๋ ฌ์ Program ์์ฑ ์ ๋น๋ฒํ๊ฒ ํ์ํ๋ต๋๋ค! ๋๋ฌธ์ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๊ณ , ์ด๋ฅผ ๊ณต๋ถํด์ผ ํ๋ ๊ฒ์ด์์.
๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ฒ ๋๋ค๋ฉด ๋์ผํ ๋ฌธ์ ์ ๋ํด ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด ๋ณผ ์ ์๊ฒ ๋๊ณ , ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์ฑ๋ฅ ๋น๊ต๋ฅผ ํตํด, ์ฑ๋ฅ ๋ถ์์ ๋ํด์๋ ์ดํดํ ์ ์๋ต๋๋ค!
๐ Bubble Sort (๋ฒ๋ธ ์ ๋ ฌ)๋?
๋ ์ธ์ ํ Data๋ฅผ ์๋ก ๋น๊ตํด์ ์์ ์๋ Data๊ฐ ๋ค์ ์๋ Data๋ณด๋ค ํฌ๋ค๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ธ ๊ฒ์ด์์.
์ฐธ๊ณ ์ฌ์ดํธ : https://visualgo.net/ko/sorting
๐ Data๊ฐ ๋ค ๊ฐ ์ผ๋
data_list = [1, 9, 3, 2]
- 1์ฐจ Round
- 1๊ณผ 9 ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 9, 3, 2] - 9์ 3์ ๋น๊ต, 9๊ฐ 3๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋
ํ์ฌ ๊ฐ [1, 3, 9, 2] - 9์ 2๋ฅผ ๋น๊ต, 9๊ฐ 2๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋
ํ์ฌ ๊ฐ [1, 3, 2, 9]
- 1๊ณผ 9 ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
- 2์ฐจ Round
- 1๊ณผ 3์ ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 3, 2, 9] - 3๊ณผ 2๋ฅผ ๋น๊ต, 3์ด ํฌ๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋
ํ์ฌ ๊ฐ [1, 2, 3, 9] - 3๊ณผ 9๋ฅผ ๋น,๊ต 3์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 2, 3, 9]
- 1๊ณผ 3์ ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
- 3์ฐจ Round
- 1๊ณผ 2๋ฅผ ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 2, 3, 9] - 2์ 3์ ๋น๊ต, 2๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 2, 3, 9]
3๊ณผ 9๋ฅผ ๋น๊ต, 3์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
ํ์ฌ ๊ฐ [1, 2, 3, 9]
- 1๊ณผ 2๋ฅผ ๋น๊ต, 1์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฆฌ ์ด๋ ํ์์์
๐ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
๐ ๋ฐ๋ณต๋๋ ๊ท์น ์ฐพ๊ธฐ
๐ n๊ฐ์ List๊ฐ ์์ ๋, ์ต๋ n-1๋ฒ์ Logic์ด ์ ์ฉ
๐Round๋ฅผ 1๋ฒ์ฉ ๊ฑฐ์น ๋ ๋ง๋ค ๊ฐ์ฅ ํฐ ์ซ์๊ฐ ๋ค์์๋ถํฐ 1๊ฐ์ฉ ์๋ฆฌ๋ฅผ ์ก๋๋ค.
๐์์ ์ด์ ๋ก Round๊ฐ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ผ์ฐ ๋๋ ์๋ ์๋ค. ๋ฐ๋ผ์ Round๋ฅผ ์ ์ฉํ ๋, ํ ๋ฒ๋ ์๊ณผ ๋ค ์ฌ์ด ๋ฐ์ดํฐ
๊ตํ์ด ์์๋ค๋ฉด ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ๋ ์ด์ ๋ก์ง์ ๋ฐ๋ณต ์ ์ฉํ ํ์ ์๋ค.
๐ Python ํ์์ผ๋ก ์ ์ด๋ณด๊ธฐ
for num in range(len(data_list)): # ๋ฐ๋ณต
swap = False # Data ๊ตํ์ด ์ด๋ค์ก๋์ง ํ์ธํ๋ ๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
for num1 in range(len(data_list) - num - 1): # ๋ฐ๋ณต๋ฌธ ์์์ n -1 ๋ฒ ๋ฐ๋ณตํด์ผ ํ๊ธฐ ๋๋ฌธ์
# ๋ฐ๋ณต๋ฌธ ์์์ ์์ Index์ ๊ฐ์ด ๋ค์ Index ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด?
if data_list[num1] > data_list[num1 + 1]:
# ์๋ก Data ์์น๋ฅผ ๋ฐ๊ฟ์ค๋ค.
data_list[num1], data_list[num1 + 1] = data_list[num1 + 1], data_list[num1]
# ํ๋ฒ์ด๋ผ๋ Data ๊ตํ์ด ์ด๋ค์ก๋ค๋ฉด if๋ฌธ์ ๋ค์ด์์ ๊ฒ์ด๊ณ , swap๋ณ์๋ฅผ True๋ก ๋ฐ๊พผ๋ค.
swap = True
if swap == False: # ํ Round๋ฅผ ๋๋๋ฐ, Data์ ๊ตํ์ด ํ๋ฒ๋ ์ด๋ค์ง์ง ์์๋ค๋ฉด
break # ์ด๋ฏธ Data๊ฐ ์ ๋ ฌ๋์๋ค๊ณ ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์ข
๋ฃํ๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ณํฉ ์ ๋ ฌ (merge sort) (0) | 2021.09.09 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] Dynamic Programming(๋์ ๊ณํ๋ฒ)& Divide and Conquer(๋ถํ ์ ๋ณต) (0) | 2021.09.09 |
[์๊ณ ๋ฆฌ์ฆ] 02. ์ ํ ์ ๋ ฌ (0) | 2021.09.08 |
[์๊ณ ๋ฆฌ์ฆ] 00. ์๊ณ ๋ฆฌ์ฆ ์ฐ์ต ๋ฐฉ๋ฒ (0) | 2021.09.06 |
[์๊ณ ๋ฆฌ์ฆ] ์๊ฐ ๋ณต์ก๋ (0) | 2021.08.16 |