2021. 9. 7. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๊ณ ๋ฆฌ์ฆ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ์์ Bubble Sort์ ๋ํด ๊ณต๋ถ ํด ๋ณด๋๋ก ํ๋ ๊ฒ์ด์์.
์์ค ์ฝ๋์ ๋ํด์ ํ์ธ ํ๊ณ ์ถ์ผ์ ๋ถ๋ค๊ป์๋ ์ฃผ๋ํ๋์ Git hub์ ๊ด์ฌ์ ์ฃผ์ธ์!
๐ Sorting (์ ๋ ฌ)์ด๋?
์ ๋ ฌ์ ์ด๋ค Data๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ ํด์ง ์์๋๋ก ๋์ดํ๋ ๊ฒ์ด์์.
์ ๋ ฌ์ Program ์์ฑ ์ ๋น๋ฒํ๊ฒ ํ์ํ๋ต๋๋ค! ๋๋ฌธ์ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๊ณ , ์ด๋ฅผ ๊ณต๋ถํด์ผ ํ๋ ๊ฒ์ด์์.
๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ฒ ๋๋ค๋ฉด ๋์ผํ ๋ฌธ์ ์ ๋ํด ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด ๋ณผ ์ ์๊ฒ ๋๊ณ , ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ์ฑ๋ฅ ๋น๊ต๋ฅผ ํตํด, ์ฑ๋ฅ ๋ถ์์ ๋ํด์๋ ์ดํดํ ์ ์๋ต๋๋ค!
๐ Bubble Sort (๋ฒ๋ธ ์ ๋ ฌ)๋?
๋ ์ธ์ ํ Data๋ฅผ ์๋ก ๋น๊ตํด์ ์์ ์๋ Data๊ฐ ๋ค์ ์๋ Data๋ณด๋ค ํฌ๋ค๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ธ ๊ฒ์ด์์.
์ฐธ๊ณ ์ฌ์ดํธ : https://visualgo.net/ko/sorting
VisuAlgo - Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix)
VisuAlgo is free of charge for Computer Science community on earth. If you like VisuAlgo, the only payment that we ask of you is for you to tell the existence of VisuAlgo to other Computer Science students/instructors that you know =) via Facebook, Twitter
visualgo.net
๐ 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 |