๐ก์์์ ๋ํ ๊ฐ์
- ์ ๋ ฅ ํฌ๊ธฐ n
- ์ ๋ ฅ ๋ฐฐ์ด A[0…. n-1]
- ์ ๋ ฅ ๋ฐ์ดํฐ : ์์ ์ ์
- ์ ๋ ฌ ๋ฐฉ์ : ์ค๋ฆ์ฐจ์ (1, 2, 3, 4,…)
2-2) ๋ฒ๋ธ ์ ๋ ฌ (Bubble sort)
- ๋ชจ๋ ์ธ์ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ก๋ก ๋น๊ต ํ,
์ผ์ชฝ ๋ฐ์ดํฐ๊ฐ ๋ ํฐ ๊ฒฝ์ฐ ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ์์ ๋ฐ๋ณต - ์ ๋ ฌ ๊ณผ์ : ๋น๊ต ์งํ ๋ฐฉํฅ →, ← ์ ๋ฐ๋ผ ๋น๊ต
- ๋น๊ต ์งํ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ ๋ ฌ ๊ณผ์ ์ด ๋ฌ๋ผ์ง
• ์ผ → ์ค : ํฐ ๊ฐ ๋ถํฐ ์ฐพ์ ์ค๋ฅธ์ชฝ ๋ ๋ถํฐ ์์น (์ค๋ฅธ์ชฝ ๋๋ถํฐ ์ ๋ ฌ)
…. < ์ธ ๋ฒ์งธ๋ก ํฐ< ๋๋ฒ์งธ๋ก ํฐ < ๊ฐ์ฅ ํฐ
• ์ผ ← ์ค: ๊ฐ์ฅ ์์ ๊ฐ๋ถํฐ ์ฐพ์ ์ผ์ชฝ ๋๋ถํฐ ์์น (์ผ์ชฝ ๋๋ถํฐ ์ ๋ ฌ)
๊ฐ์ฅ ์์ < ๋ ๋ฒ์งธ๋ก ์์ < ์ธ๋ฒ์งธ๋ก ์์ < …..
- ๋น๊ต ์งํ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ ๋ ฌ ๊ณผ์ ์ด ๋ฌ๋ผ์ง
์ผ์ชฝ → ์ค๋ฅธ์ชฝ
50๊ณผ 20์ ๋น๊ต
→ “50์ด 20๋ณด๋ค ํฌ๋ค”
→ ๊ทธ๋ผ 50์ด ์ค๋ฅธ์ชฝ!!
1๋จ๊ณ์ ๋น๊ต ํ ๊ฒฐ๊ณผ : ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ค๋ฅธ์ชฝ
์ผ์ชฝ ← ์ค๋ฅธ์ชฝ
10๊ณผ 40์ ๋น๊ต
→ “10์ด 40๋ณด๋ค ์๋ค”
→ ๊ทธ๋ผ 10์ด ์ผ์ชฝ!!
1๋จ๊ณ ๋น๊ตํ ๊ฒฐ๊ณผ :๊ฐ์ฅ ์์ ๊ฐ์ด ์ผ์ชฝ
3. ํน์ง
- ์ฑ๋ฅ : O(n²)
- ์ ์๋ฆฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ : ์ ๋ ฅ ๋ฐฐ์ด A ์ด์ธ ์์๊ฐ(i, j, tmp) ์ ์ ์ฅ ๊ณต๊ฐ๋ง ํ์
- ์์ ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ : [40, 40, 40] ์ด ์์ผ๋ฉด ์์น๊ตํ ๋ฏธ๋ฐ์
- ์ ํ ์ ๋ ฌ๋ณด๋ค ๋ฐ์ดํฐ ๊ตํ์ด ๋ง์ด ๋ฐ์ - ์ ํ์ ๋ ฌ๋ณด๋ค ๋นํจ์จ์
[JS code]
function bubbleSort(A) {
const n = A.length;
for (let i = 0; i < n - 1; i++) { // ๋จ๊ณ : (n-1)๋ฒ ๋ฐ๋ณต
for (let j = 0; j < n - 1; j++) { // ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ๋ ๊ฒฝ์ฐ
if (A[j] > A[j + 1]) { // ‘์ผ์ชฝ ๋ฐ์ดํฐ > ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ’์ด๋ฉด
// A[j]์ A[j+1]์ ์์น๋ฅผ ๋ฐ๊ฟ. ์: [50, 10] -> [10, 50]
let temp = A[j]; // A[j]๋ฅผ ์์๋ก ์ ์ฅ
A[j] = A[j + 1]; // A[j]์ A[j+1] ๊ฐ์ ๋์
A[j + 1] = temp; // A[j+1]์ ์์๋ก ์ ์ฅํ ๊ฐ์ ๋์
}
}
}
return A; // ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
}
4. ๊ฐ์ ๋ ๋ฒ๋ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฃจํ์ ๋ฐ๋ณต ํ์๋ฅผ ์ค์
- 1๋ฒ์งธ ์กฐ๊ฑด ์ถ๊ฐ :
์๋ฆฌ๋ฐ๊ฟ์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ด๋ฏธ ์ ๋ ฌ ๋ ์ํ์ด๋ฉด, ์ดํ ๋น๊ต ์์ด ์ข ๋ฃ - 2๋ฒ ์งธ ์กฐ๊ฑด ์ถ๊ฐ :
๋ฌด์กฐ๊ฑด ์ผ์ชฝ/์ค๋ฅธ์ชฝ ๋๊น์ง ์ด๋ํ๋ฉฐ ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ํ์ ์์
for (j=0; j < (n-1) - i ; j++)
- 1๋ฒ์งธ ์กฐ๊ฑด ์ถ๊ฐ :
- ์ต์
์ ๊ฒฝ์ฐ : ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ญ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ
- ๊ธฐ์กด ๋ฒ๋ธ ์ ๋ ฌ, ๊ฐ์ ๋ ๋ฒ๋ธ์ ๋ ฌ ๋ ๋ค O(n²)
- ์ต์ ์ ๊ฒฝ์ฐ : ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ํ๋ ์์๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒฝ์ฐ
- ๊ธฐ์กด ๋ฒ๋ธ ์ ๋ ฌ : ๋ชจ๋ ๋จ๊ณ ์ํ = O(n²)
- ๊ฐ์ ๋ ๋ฒ๋ธ ์ ๋ ฌ : n๋ฒ ๋น๊ต, ์๋ฆฌ๋ฐ๊ฟ 0๋ฒ = O(n)
[JS code]
function advancedBubbleSort(A) {
const n = A.length;
for (let i = 0; i < n - 1; i++) {
let sorted = true; // ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ๋ก ๊ฐ์
for (let j = 0; j < n - 1 - i; j++) { // ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ
if (A[j] > A[j + 1]) { // ๋ง์ฝ A[j]๊ฐ A[j+1]๋ณด๋ค ํฌ๋ค๋ฉด
// A[j]์ A[j+1]์ ์์น๋ฅผ ๋ฐ๊ฟ
let temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
sorted = false; // ์๋ฆฌ๋ฐ๊ฟ ๋ฐ์ → ์ ์ฒด์ ์ผ๋ก ๋ฏธ์ ๋ ฌ ์ํ
}
}
if (sorted) break; // ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ์ด๋ฏ๋ก ์ข
๋ฃ
}
return A;
}
๋ฐ์ํ
๋๊ธ