๐ ๋ฒ๋ธ ์ ๋ ฌ
- 2๊ฐ์ ์ธ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ ์์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ ์๋ ๋ฐ์ดํฐ๋ณด๋ค ํฌ๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๐ ๋ฒ๋ธ ์ ๋ ฌ ๊ตฌํํ๊ธฐ
๋ฒ๋ธ ์ ๋ ฌ์ ํน์ด์ ํ์
ํ๊ธฐ
- N๊ฐ์ ์์๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ ฌ์ N-1ํด ์ผ์ด๋๋ค.
- ์ ๋ ฌ์ด 1ํด ์ผ์ด๋ ๋๋ง๋ค ๊ฐ์ฅ ํฐ ์ซ์๊ฐ ๋ค์์๋ถํฐ 1๊ฐ์ฉ ๊ฒฐ์ ๋๋ค.
- ๋ฐ๋ผ์ ์ ๋ ฌ์ด 1ํด ์ผ์ด๋ ๋ ํด๋น ํด ์์์ swap์
N-1-(์ ๋ ฌ๋ ํด ์)
๋ฒ ์คํ๋๋ค.
- ๋ง์ฝ ์ ๋ ฌ์ ํ ํด ์คํํ๋๋ฐ swap์ด ํ๋ฒ๋ ์ผ์ด๋์ง ์์ ๊ฒฝ์ฐ, ์ด๋ฏธ ์์ ํ๊ฒ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ๋ ์ด์ ์ ๋ ฌ์ ๋ฐ๋ณตํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ก์ง์ด ์ผ์ฐ ๋๋ ์๋ ์๋ค.
๋๋ต์ ์ฝ๋
changed = False
for index1 in range(๋ฐ์ดํฐ ๊ธธ์ด - 1):
for index2 in range(๋ฐ์ดํฐ๊ธธ์ด - 1 - index1):
if list[index2] > list[index2 + 1]:
swap(list[index2], list[index2 + 1])
changed = True
if not changed:
break
โ
Code
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
๐ ๋ฒ๋ธ ์ ๋ ฌ ์๊ฐ๋ณต์ก๋
- ๋ฐ๋ณต๋ฌธ์ด ๋ ๊ฐ์ด๋ฏ๋ก O(n2)
- ์ต์
์ ๊ฒฝ์ฐ, 2nโ(nโ1)โ
- ์์ ์ ๋ ฌ์ด ๋์ด ์๋ ์ํ๋ผ๋ฉด ์ต์ ์ O(n)