๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort)์ด๋?
๋ฒ๋ธ ์ ๋ ฌ์ ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํ์ฌ ํฐ/์์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ฆฌ๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ปํ๋ค.
์ ํ์ ๋ ฌ๊ณผ ๊ฐ์ด ์ ์ผ ํฐ ์์๋ฅผ ๋์๋ฆฌ๋ก ์ฎ๊ธฐ๋ ์์ ์ ๋ฐ๋ณตํ๋๋ฐ ์ ์ผ ํฐ ์์๋ฅผ ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
๋ฒ๋ธ์ ๋ ฌ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด.
๋ผ์ด๋์ ์์๋ณ๋ก ์์์ ํฌ์ธํฐ๋ฅผ ๋ง๋ค์ด ๋ท ๊ฐ๊ณผ ๋น๊ต๋ฅผ ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ๋ง์ฝ ๋ท ๊ฐ๋ณด๋ค ํฌ๊ฒ๋๋ฉด ์๋ฆฌ๋ฅผ ์ฎ๊ฒจ ๊ทธ ๋ค์ ๊ฐ๊ณผ ๋น๊ตํ๊ณ ํฌ์ง ์๋ค๋ฉด ํฌ์ธํฐ๋ฅผ ๋ค๋ก ๋๊ฒจ ํฌ์ธํฐ๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ๋๊น์ง ๋๋ฌํ์ ๋ ํ ๋ผ์ด๋๊ฐ ์ข ๋ฃ๋๋ค.
pseudo ์ฝ๋๋ฅผ ๋จผ์ ๋ณด์๋ฉด
bubbleSort(A[], n){ .... 1
for last <- n downto 2 .... 2
for i <- i to last - 1 .... 3
if (A[i] > A[i+1]) then A[i] <-> A[i+1] .... 4
}
- ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด{7, 22, 31, 4, 11, 40}์ด ์๋ค๊ณ ์น์. ๊ฐ ์ ๋ ฌ์ ๋ผ์ด๋๋ฅผ ํตํด ์งํ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ผ์ด๋
-
*: ์์น ํฌ์ธํฐ
-
์ต์ด ํฌ์ธํฐ ์์น: {*7, 22, 31, 4, 11, 40}
7๊ณผ 22๋ฅผ ๋น๊ตํ๋ค
-> 7๊ณผ 22์ค 22๊ฐ ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 22๋ก ์ฎ๊ธด๋ค.
๊ฒฐ๊ณผ: {7, *22, 31, 4, 11, 40}
22์ 31์ ๋น๊ตํ๋ค
-> 22์ 31์ค 31์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 31๋ก ์ฎ๊ธด๋ค.
๊ฒฐ๊ณผ: {7, 22, *31, 4, 11, 40}
31๊ณผ 4๋ฅผ ๋น๊ตํ๋ค
-> 31์ 4์ค 31์ด ๋ ํฌ๋ฏ๋ก 4์ ์๋ฆฌ ๊ตํ์ ํ๋ค.
๊ฒฐ๊ณผ: {7, 22, 4, *31, 11, 40}
31๊ณผ 11์ ๋น๊ตํ๋ค
-> 31๊ณผ 11์ค 31์ด ๋ ํฌ๋ฏ๋ก 11๊ณผ ์๋ฆฌ๋ฅผ ๊ตํํ๋ค.
๊ฒฐ๊ณผ: {7, 22, 4, 11, *31, 40}
31๊ณผ 40์ ๋น๊ตํ๋ค
-> 31๊ณผ 40์ค 40์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 40์ผ๋ก ์ฎ๊ธด๋ค.
๊ฒฐ๊ณผ: {7, 22, 4, 11, 31, *40}
[40 ์ ๋ ฌ ์๋ฃ]
ํฌ์ธํฐ์ ์์น๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ์ผ๋ฏ๋ก 1๋ฒ์งธ ๋ผ์ด๋๋ฅผ ์ข
๋ฃ์ํจ๋ค.
๋ ๋ฒ์งธ ๋ผ์ด๋
-
*: ์์น ํฌ์ธํฐ
-
์ต์ด ํฌ์ธํฐ ์์น: {*7, 22, 31, 4, 31}
7๊ณผ 22๋ฅผ ๋น๊ตํ๋ค
-> 7๊ณผ 22์ค 22๊ฐ ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 22๋ก ์ฎ๊ธด๋ค.
๊ฒฐ๊ณผ: {7, *22, 4, 11, 31}
22์ 4๋ฅผ ๋น๊ตํ๋ค
-> 22์ 4์ค 22๊ฐ ๋ ํฌ๋ฏ๋ก 4์ ์๋ฆฌ๋ฅผ ๊ตํํ๋ค.
๊ฒฐ๊ณผ: {7, 4, *22, 11, 31}
22์ 11์ ๋น๊ตํ๋ค
-> 22์ 11์ค 22๊ฐ ๋ ํฌ๋ฏ๋ก 11๊ณผ ์๋ฆฌ๋ฅผ ๊ตํํ๋ค.
๊ฒฐ๊ณผ: {7, 4, 11, *22, 31}
22์ 31์ ๋น๊ตํ๋ค
-> 22์ 31์ค 31์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 31๋ก ์ฎ๊ธด๋ค
๊ฒฐ๊ณผ: {7, 4, 11, 22 ,*31}
[{31, 40} ์ ๋ ฌ ์๋ฃ]
ํฌ์ธํฐ์ ์์น๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ์ผ๋ฏ๋ก 2๋ฒ์จฐ ๋ผ์ด๋๋ฅผ ์ข
๋ฃ์ํจ๋ค.
์ธ ๋ฒ์งธ ๋ผ์ด๋
-
*: ์์น ํฌ์ธํฐ
-
์ต์ด ํฌ์ธํฐ ์์น: {*7, 4, 11, 22}
7๊ณผ 4๋ฅผ ๋น๊ตํ๋ค
-> 7๊ณผ 4์ค 7์ด ๋ ํฌ๋ฏ๋ก 4์ ์๋ฆฌ๋ฅผ ๊ตํํ๋ค.
๊ฒฐ๊ณผ: {4, *7, 11, 22}
7๊ณผ 11์ ๋น๊ตํ๋ค
-> 7๊ณผ 11์ค 11์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 11๋ก ์ฎ๊ธด๋ค
๊ฒฐ๊ณผ: {4, 7 ,*11, 22}
11๊ณผ 22๋ฅผ ๋น๊ตํ๋ค
-> 11๊ณผ 22์ค 22๊ฐ ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 22๋ก ์ฎ๊ธด๋ค
๊ฒฐ๊ณผ: {4, 7 ,11 ,*22}
[{11 22 31 40} ์ ๋ ฌ ์๋ฃ]
ํฌ์ธํฐ์ ์์น๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ์ผ๋ฏ๋ก 3๋ฒ์จฐ ๋ผ์ด๋๋ฅผ ์ข
๋ฃ์ํจ๋ค.
๋ค ๋ฒ์งธ ๋ผ์ด๋
-
*: ์์น ํฌ์ธํฐ
-
์ต์ด ํฌ์ธํฐ ์์น: {*4, 7, 11}
4์ 7์ ๋น๊ตํ๋ค
-> 4์ 7์ค 7์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 7๋ก ์ฎ๊ธด๋ค.
๊ฒฐ๊ณผ: {4, *7, 11}
7๊ณผ 11์ ๋น๊ตํ๋ค
-> 7๊ณผ 11์ค 11์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 11๋ก ์ฎ๊ธด๋ค
๊ฒฐ๊ณผ: {4, 7 ,*11}
[{7 11 22 31 40} ์ ๋ ฌ ์๋ฃ]
ํฌ์ธํฐ์ ์์น๊ฐ ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ์ผ๋ฏ๋ก 4๋ฒ์จฐ ๋ผ์ด๋๋ฅผ ์ข
๋ฃ์ํจ๋ค.
๋ง์ง๋ง ๋ผ์ด๋
-
*: ์์น ํฌ์ธํฐ
-
์ต์ด ํฌ์ธํฐ ์์น: {*4, 7}
4์ 7์ ๋น๊ตํ๋ค
-> 4์ 7์ค 7์ด ๋ ํฌ๋ฏ๋ก ํฌ์ธํฐ๋ฅผ 7๋ก ์ฎ๊ธด๋ค
๊ฒฐ๊ณผ: {4, *7}
[{4 7 11 22 31 4} ์ ๋ ฌ ์๋ฃ]
๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)์ ์๊ฐ ๋ณต์ก๋
์์ pseudo ์ฝ๋๋ฅผ ๋ดค์ ๋ ์ ๋ ฅ ๋ฐฐ์ด A[n]์ด๋ฉด (n์ ์ ๋ ฅ์ ํฌ๊ธฐ)
for ๋ฐ๋ณต
-
...2 ๋ ์ ํ์ ๋ ฌ์ for ๋ฃจํ์ ๊ฐ์ ์ญํ ์ ํ๊ณ ๋ฃจํ๋ฅผ ๋ ๋๋ง๋ค ์ ์ผ ํฐ ์์๋ฅผ ๋งจ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ด๊ณ ์ ๋ ฌํ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ํ๋์ฉ ์ค์ฌ๋๊ฐ๋ค.
-
...3 ๋ ์์ชฝ ๋ฃจํ๋ก์จ ๊ฐ์ฅ ํฐ ์์๋ฅผ ๋งจ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณด๋ด๋ ์ญํ ์ ํ๋ค. ์ด ๋ถ๋ถ์ด ์ ํ์ ๋ ฌ๊ณผ ๋ค๋ฅด๋ค. ์ ํ์ ๋ ฌ์ ๊ฐ์ฅ ํฐ ์๋ฅผ ์ฐพ์ ๋ค์ ๋งจ ์ผ์ชฝ์ผ๋ก ๋ณด๋ด๋ ๋ฐ๋ฉด, ๋ฒ๋ธ์ ๋ ฌ์ ์ผ์ชฝ๋ถํฐ ์ด์ํ ์๋ฅผ ๋น๊ตํด๊ฐ๋ฉฐ ์์๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก : ...2 ๋ฒ์ for ๋ฃจํ์์๋ n-1๋ฒ ์ํํ๊ณ ...3๋ฒ์ for ๋ฃจํ์์๋ last-1 ๋ฒ ์ํํ๋๋ฐ last๊ฐ 2๊น์ง 1์ฉ ๊ฐ์ํ๋ฏ๋ก n(n-1)/2
์ด๋ค. ๋ฐ๋ผ์ ๋ฒ๋ธ์ ๋ ฌ์ ์ํ์๊ฐ์ ∂(n^2)์ด๋ค.
Best | Avg | Worst |
---|---|---|
n^2 | n^2 | n^2 |
๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort)์ ํน์ง
์ฅ์
- ๊ตฌํ์ด ๋งค์ฐ ๊ฐ๋จํ๋ค.
๋จ์
- ์์์ ๋ง์ง ์์ ์์๋ฅผ ์ธ์ ํ ์์์ ๊ตํํ๋ค.
- ํ๋์ ์์๊ฐ ๊ฐ์ฅ ์ผ์ชฝ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์์ ๋ชจ๋ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ตํ๋์ด์ผ ํ๋ค.
- ํนํ ํน์ ์์๊ฐ ์ต์ข ์ ๋ ฌ ์์น์ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ๋ผ๋ ๊ตํ๋๋ ์ผ์ด ์ผ์ด๋๋ค.
-
์ผ๋ฐ์ ์ผ๋ก ๊ตํ์ด ์ด๋๋ณด๋ค ๋ ๋ณต์กํ๊ธฐ๋๋ฌธ์ ๊ฑฐ์ ์ฐ์ง ์๋๋ค
๋ฒ๋ธ ์ ๋ ฌ์ ์ต๊ณ ํจ์จ
์์์ ์๊ฐํ ๋ฒ๋ธ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ํ์ ์์ํ ๋๋ ์ค๊ฐ์ ๋ฐฐ์ด์ด ์ด๋ฏธ ์ ๋ ฌ์ด๋์ด ์๋ ์ํ๋ผ๋ ๊ณ์ ๋๊น์ง ๋ฌด์๋ฏธํ ์ํ์ ๊ณ์ํ๋ค. ์ด๋ฅผ ์ํด ์๊ณ ๋ฆฌ์ฆ์ ํ ๊ฐ์ง ์ฅ์น์ธจ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
bubbleSort(A[], n){
for last <- 2{ .... 1
sorted <- true;
for i <- 1 to last - 1;{ .... 2
if(A[i]>A[i+1]) then{
A[i] <-> A[i+1]; .... 3
sorted <- false; .... 4
}
}
if(sorted = true) then return; .... 5
}
}
sorted <- true;
์ด ๋ถ๋ถ์ sorted Flag๋ผ๊ณ ์นญํ๊ณ ํ๋๊ทธ๊ฐ ๋์ํ๊ธฐ ์ํด์๋ ...2์ ๋ฐ๋ณต๋ฌธ์ ๋์์์ผ์ผ ํ๋ค.
์ฆ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋ฉด ์๋์ ์ผ๋ก sorted ํ๋๊ทธ๊ฐ ๋์ํ์ฌ ํ๋๊ทธ ๊ฐ์ false
๋ก ๋ฐ๊ฟ๋๊ณ ๋ง์ฝ ....2์ ๋ฐ๋ณต๋ฌธ์ด ๋์ํ์ง ์์ผ๋ฉด ๋ฐ๋ก return ํ๊ฒ ๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort)์ ์๋ฐ ์ฝ๋
'๐ป Computer Science > - Data Structure, Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ด์ง ๊ฒ์ ํธ๋ฆฌ(Binary Search Tree) (0) | 2019.11.23 |
---|---|
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ํต ์ ๋ ฌ (Quick Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ๋ณํฉ ์ ๋ ฌ(Merge Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ฝ์ ์ ๋ ฌ (Insertion Sort) (0) | 2019.11.23 |
[์๊ณ ๋ฆฌ์ฆ-์ด๋ก ] ์ ํ ์ ๋ ฌ(Selection Sort) (0) | 2019.11.23 |
๋๊ธ