Skip to content

Latest commit

ย 

History

History
69 lines (50 loc) ยท 2.52 KB

merge-sort.md

File metadata and controls

69 lines (50 loc) ยท 2.52 KB

๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

ํŠน์ง•

  • ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•œ ํ›„ ๋ถ„ํ• ํ•œ ๊ฒƒ๋“ค์„ ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ์‹

  • ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์†ํ•จ

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ์ชผ๊ฐœ์ง„ ๋‹ค์Œ ํ•˜๋‚˜์”ฉ ํ•ฉ์ณ๊ฐ€๋ฉด์„œ ์ •๋ ฌ์„ ์‹œ์ผœ์ฃผ๋Š” ์›๋ฆฌ

  • ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•œ๋‹ค.

  • ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” stableํ•œ ์ •๋ ฌ์ด๋‹ค.

  • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•œ ๊ฒฝ์šฐ, LinkedList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ํ€ต ์ •๋ ฌ์„ ํฌํ•จํ•œ ๋‹ค๋ฅธ ์–ด๋–ค ์ •๋ ฌ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค.

  • ์ •๋ ฌํ•˜๋Š”๋ฐ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ (in-place ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹˜)

  • ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋‘๊ฐ€์ง€ ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.

    • function merge(left, right): ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋‘๊ฐ€์ง€๋ฅผ ๋ฐ›์•„์„œ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ํ•จ์ˆ˜
    • function mergeSort(arr): ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ์„œ merge ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ธฐ๋Š” ํ•จ์ˆ˜

๋กœ์ง

  1. ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆˆ๋‹ค
  2. ๊ฐ ์š”์†Œ์™€ ์ธ์ ‘ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
  3. ๋‘๊ฐœ์˜ ์ธ์ ‘ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ๋ณ‘ํ•ฉํ•œ๋‹ค.
  4. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชจ๋“  ์š”์†Œ๋“ค์€ ์ •๋ ฌ๋˜๊ณ  ๋ณ‘ํ•ฉํ•œ๋‹ค.

์‹œ๊ฐ„๋ณต์žก๋„

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));
};

Reference

- CreatedAt 2023.01.01

Back