-
์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋จ์๋ก ๋ถํ ํ ํ ๋ถํ ํ ๊ฒ๋ค์ ๋ค์ ๋ณํฉํ๋ ์ ๋ ฌ ๋ฐฉ์
-
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ
์ ์ํจ -
์ฌ๊ท ํจ์
๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข ์ ์ผ๋ก๋ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1์ด ๋ ๋๊น์ง ์ชผ๊ฐ์ง ๋ค์ ํ๋์ฉ ํฉ์ณ๊ฐ๋ฉด์ ์ ๋ ฌ์ ์์ผ์ฃผ๋ ์๋ฆฌ -
์ด๋ ํ ๊ฒฝ์ฐ์๋
์ข์ ์ฑ๋ฅ์ ๋ณด์ฅ
ํ๋ค. -
์ค๋ณต๋ ๋ฐ์ดํฐ์ ์์๊ฐ ๋ฐ๋์ง ์๋
stable
ํ ์ ๋ ฌ์ด๋ค. -
ํฌ๊ธฐ๊ฐ ํฐ ๋ ์ฝ๋๋ฅผ ์ ๋ ฌํ ๊ฒฝ์ฐ, LinkedList๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ณํฉ ์ ๋ ฌ์ ํต ์ ๋ ฌ์ ํฌํจํ ๋ค๋ฅธ ์ด๋ค ์ ๋ ฌ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์จ์ ์ด๋ค.
-
์ ๋ ฌํ๋๋ฐ
์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํจ
(in-place ์๊ณ ๋ฆฌ์ฆ์ด ์๋) -
๋ณํฉ ์ ๋ ฌ์ ๋๊ฐ์ง ํจ์๋ก ์ด๋ฃจ์ด ์ง๋ค.
function merge(left, right)
: ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋๊ฐ์ง๋ฅผ ๋ฐ์์ ํ๋๋ก ํฉ์น๋ ํจ์function mergeSort(arr)
: ๋ฐฐ์ด์ ๋ฐ์ผ๋ก ์ชผ๊ฐ์ merge ํจ์์๊ฒ ๋๊ธฐ๋ ํจ์
- ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ฅ ์์ ๋จ์๋ก ๋๋๋ค
- ๊ฐ ์์์ ์ธ์ ํ ๋ฆฌ์คํธ๋ฅผ ๋น๊ตํ๋ค.
- ๋๊ฐ์ ์ธ์ ํ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๊ณ ๋ณํฉํ๋ค.
- ๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ์์๋ค์ ์ ๋ ฌ๋๊ณ ๋ณํฉํ๋ค.
Name | Best | Average | Worst | Memory | Stable | Comments |
---|---|---|---|---|---|---|
Merge sort | n log(n) | n log(n) | n log(n) | n | Yes |
const merge = (left, right) => {
const result = [];
while (left.length !== 0 && right.length !== 0) {
left[0] <= right[0]
? result.push(left.shift())
: result.push(right.shift());
}
return [...result, ...left, ...right];
};
const mergeSort = (arr) => {
if (arr.length === 1) return arr;
const pivot = Math.floor(arr.length / 2);
const left = arr.slice(0, pivot);
const right = arr.slice(pivot);
return merge(mergeSort(left), mergeSort(right));
};
- CreatedAt 2023.01.01