
- bubbleSort
์ ์๋ฅผ ์์๋ก ๊ฐ๋ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋ฆฌํดํด์ผ ํฉ๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ(bubble sort)์ ์ฌ๋ฌ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(์ฝ์ ์ ๋ ฌ, ํต ์ ๋ ฌ, ๋ณํฉ ์ ๋ ฌ, ๊ธฐ์ ์ ๋ ฌ ๋ฑ) ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋ฒ๋ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ๊ฐ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์๊ฐ ๋ ๋ฒ์งธ ์์๋ณด๋ค ํฌ๋ฉด, ๋ ์์์ ์์น๋ฅผ ๋ฐ๊ฟ๋๋ค. (swap)
- ๋ ๋ฒ์งธ ์์์ ์ธ ๋ฒ์งธ ์์๋ณด๋ค ํฌ๋ฉด, ๋ ์์์ ์์น๋ฅผ ๋ฐ๊ฟ๋๋ค. (swap)
- 1, 2๋ฅผ ๋ง์ง๋ง๊น์ง ๋ฐ๋ณตํฉ๋๋ค. (๋ง์ง๋ง์์ ๋ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์๋ฅผ ๋น๊ต)
- 1~3์ ๊ณผ์ ์ ํ ๋ฒ ๊ฑฐ์น๊ฒ ๋๋ฉด, ๊ฐ์ฅ ํฐ ์์๊ฐ ๋ฐฐ์ด์ ๋ง์ง๋ง์ผ๋ก ๋ฐ๋ ค๋ฉ๋๋ค.
- 1~3์ ๊ณผ์ ์ ์ฒซ ์์๋ถํฐ ๋ค์ ๋ฐ๋ณตํฉ๋๋ค.
- 5๋ฅผ ํตํด ๋ ๋ฒ์งธ๋ก ํฐ ์์๊ฐ ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ฐ๋ก ๋ ๋ฒ์งธ๋ก ๋ฐ๋ ค๋ฉ๋๋ค.
- 1~3์ ๊ณผ์ ์ ์ด n๋ฒ(๋ฐฐ์ด์ ํฌ๊ธฐ) ๋ฐ๋ณตํฉ๋๋ค.
- ์ด ๋ชจ์ต์ด ๋ง์น '๊ฑฐํ์ด ๋ฐ๋ ค ์ฌ๋ผ๊ฐ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ชจ์ต'๊ณผ ๊ฐ์์ bubble sort๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.

const bubbleSort = function (arr) {
return arr.sort((a,b) => a-b)
};
์ด๋ ๊ฒ ํ๊ณ ์ถ์๋ค.. ใ
์ด์จ๋ ์์ํด๋ณด์
์ผ๋จ ์ ์ฒด๋ฅผ ์ํํ๋ ๋ฐ๋ณต๋ฌธ์ด ํ๋ ํ์ํ ๊ฑฐ๊ณ ,
๊ทธ ์์์ ๋ฐ๋ณต๋ฌธ์ ์ถ๊ฐํด ์ ์ ๋น๊ตํ๋ ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํด๋ณด๋ ค๊ณ ํด๋ดค๋ค.
const bubbleSort = function (arr) {
for (let i = 0; i<=arr.length; i++) {
for (let j = 0; j<=arr.length; j++) {
if (arr[j] > arr[j+1]) {
let temp = arr[j+1]
arr[j+1] = arr[j]
arr[j] = temp
}
}
}
return arr
};
์ด๋ฌ๋๋ ์คํ์๊ฐ์ด๊ณผ๊ฐ ๋ด๊ณ , ๋๋ฌด ๋ง์ ์ํ์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ธ๋ฏ...
๊ทธ๋์ ๋ฐ๊ฟ ๋ฐฐ์ด๊ณผ ์๋ ๋ฐฐ์ด์ด ๋ณํ๊ฒ ์๋ค๋ฉด(JSON.stringify์ด์ฉ/ (newArr.toString() === arr.toString()) ๋ ๊ฐ๋ฅ), break๋ฅผ ๊ฑธ์ด์ฃผ๋ ์กฐ๊ฑด์ ์ ์ชฝ ๋ฐ๋ณต๋ฌธ์ ์ถ๊ฐํด์ฃผ์๋ค.
์ ๊ทธ๋ฆฌ๊ณ i, j ๋ฒ์๋ ๋ฐฐ์ด์ด๊ธฐ๋๋ฌธ์ ๋ฑํธ ๋นผ์ฃผ๊ณ , ๋ ๋ง์ง๋ง๊น์ง ๋น๊ตํ์ง ์๊ธฐ๋๋ฌธ์ -1๋ ํด์ฃผ์ด์ผํจ! ๋๋ฌด ๋์ถฉ ์๊ฐํด๋ฒ๋ฆฐ ๋ชจ์
๋ด๊ฐ ์ด ๋ต โ๐ป
const bubbleSort = function (arr) {
let newArr = arr.slice(0)
for (let i = 0; i<newArr.length-1; i++) {
for (let j = 0; j<newArr.length-1; j++) {
if (newArr[j] > newArr[j+1]) {
let temp = newArr[j+1]
newArr[j+1] = newArr[j]
newArr[j] = temp
}
}
if(JSON.stringify(newArr) === JSON.stringify(arr)) {
break
}
}
return newArr;
};
๋ ํผ๋ฐ์ค ๐
let bubbleSort = function (arr) {
let N = arr.length;
for (let i = 0; i < N; i++) {
// swap ํ์๋ฅผ ๊ธฐ๋กํ๋ค.
// ์ด๋ค ์์๋ swap๋์ง ์์ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ์ ๋ ฌ๋ ์ํ์ด๋ค.
let swaps = 0;
// ๋งค ๋ฐ๋ณต(iteration)๋ง๋ค i๋ฒ์งธ๋ก ํฐ ์๊ฐ ๋ง์ง๋ง์์ i๋ฒ์งธ ์์นํ๊ฒ ๋๋ค.
// ์ด๋ฏธ ์ ๋ ฌ๋ ์์๋ ๊ณ ๋ คํ ํ์๊ฐ ์์ผ๋ฏ๋ก, 'j < N - 1 - i'๋ง ๋น๊ตํ๋ฉด ๋๋ค.
for (let j = 0; j < N - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swaps++;
swap(j, j + 1, arr);
}
}
if (swaps === 0) {
break;
}
}
return arr;
};
๋ ํผ๋ฐ์ค๋ ํ์๋ฅผ ๊ธฐ๋กํด์ ํ์๊ฐ 0์ด๋ผ๋ฉด breakํด์ฃผ๋ ์์ผ๋ก ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋, ์ด๋ฏธ ์ ๋ ฌ๋ ์์๋ ๊ณ ๋ คํ ํ์๊ฐ ์์ผ๋ฏ๋ก, 'j < N - 1 - i'๋ง ๋น๊ตํ๋ฉด ๋๋ค๋ ๋ถ๋ถ์ด! ์์ด์, ์ํ! ํ๊ณ
j < newArr.length - i - 1 ๋๋ ์๋ ๊ฒ ๋ฐ๊ฟ ใ
ใ
ํ๋๋ผ๋ ์ผ์ ์ค์ด์
'Algorithm > DailyCoding' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[23.02.27] Daily Coding 25 - tiling (0) | 2023.05.19 |
---|---|
[23.02.24] Daily Coding 24 (0) | 2023.05.19 |
[23.02.21] Daily Coding 22 - fibonacci (0) | 2023.05.19 |
[23.02.20] Daily Coding 21 (0) | 2023.05.19 |
[22.11.02] Daily Coding 25 (0) | 2023.05.17 |