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

ํ•ฉ๋ณ‘ ์ •๋ ฌ์ด๋ž€?

๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌ์€ '๋ฌธ์ œ๋ฅผ ๋ถ„ํ• 'ํ•˜๊ณ , ๋ถ„ํ• ๋œ ๋ฌธ์ œ๋ฅผ '๋‹ค์‹œ ์ •๋ณตํ•˜์—ฌ ํ•ฉ์น˜๋Š”' ๊ณผ์ •์ด๋‹ค.

  • ๋ถ„ํ•  ์ •๋ณต(Divide and Conquer) ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ๋ฐฉ์‹

์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋ถ„ํ• ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ์ชผ๊ฐœ์–ด, ์ธ์ ‘ํ•œ ์›์†Œ๋“ค๋ผ๋ฆฌ ๋น„๊ตํ•ด์„œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ '๋น„๊ต'ํ•˜๋ฉด์„œ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— '๋น„๊ต ์ •๋ ฌ'์ด๋ฉฐ, ์ •๋ ฌ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ์™ธ์— ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— '์ œ์ž๋ฆฌ ์ •๋ ฌ(in-place-sort)'์ด ์•„๋‹ˆ๋‹ค. ๋ถ„ํ•  ์ •๋ณต์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๊ณ  ์•ž์—์„œ๋ถ€ํ„ฐ ํ•ฉ์ณ๋‚˜๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ '์•ˆ์ •์ •๋ ฌ(Stable sort)' ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.

  • ๋งŒ์•ฝ ์ œ์ž๋ฆฌ ์ •๋ ฌ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ผ๋ถ€ ์„ฑ๋Šฅ์„ ํฌ๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

Merge sort๋Š” binary tree ํ˜•ํƒœ๋กœ ์ชผ๊ฐœ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ ๊นŠ์ด๋Š” logN์ด ๋œ๋‹ค. ๊ฐ ๋ถ„ํ• (N๊ฐœ) ๋ณ„๋กœ ํ•ฉ๋ณ‘์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ์ด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(NlogN)์ด ๋œ๋‹ค.

Quick sort๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•  ๊ฒฝ์šฐ ํ•ฉ๋ณ‘ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

ํ•ฉ๋ณ‘ ์ •๋ ฌ์˜ ํŠน์ง•

  1. O(NlogN)์˜ ์‹œ๊ฐ„๋ณต์žก๋„

    1. ์ตœ์•…, ์ตœ์„ , ํ‰๊ท  ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

    2. ํ•ญ์ƒ ์ผ์ •ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜์—ฌ ์•ˆ์ •์ ์ธ ์ •๋ ฌ ์†๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  2. O(N)์˜ ๊ณต๊ฐ„๋ณต์žก๋„

    1. ์ •๋ ฌ ๊ณผ์ •์—์„œ ์ž„์‹œ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, O(N)์˜ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค.

  3. ๊ตฌํ˜„๋ฐฉ์‹: ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

    1. ๋ถ„ํ• (Divide): ์ž…๋ ฅ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฑฐ์˜ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

    2. ์ •๋ณต(Conquer): ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

    3. ๊ฒฐํ•ฉ(Combine): ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋“ค์„ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค.

  4. ์žฅ๋‹จ์ 

    1. ์žฅ์ 

      1. ํ€ต ์ •๋ ฌ๊ณผ ๋‹ฌ๋ฆฌ pivot ์„ ํƒ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์„œ ์„ฑ๋Šฅ ๋ณ€๋™์ด ์ ๋‹ค.

      2. ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์‹คํ–‰์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠนํžˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ์— ํšจ๊ณผ์ ์ด๋‹ค.

    2. ๋‹จ์ 

      1. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์š”๊ตฌ๋˜๊ณ , ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

      2. ์ ์€ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํด ์ˆ˜ ์žˆ๋‹ค.

ํ•ฉ๋ณ‘ ์ •๋ ฌ ๊ณผ์ •

  1. ๋ถ„ํ• (Divide): ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค.

  2. ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 0 ๋˜๋Š” 1์ด ๋  ๋•Œ๊นŒ์ง€ 1๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

  3. ์ •๋ณต(Conquer): ์ธ์ ‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ์™€ ์ •๋ ฌํ•˜์—ฌ ํ•ฉ์นœ๋‹ค.

๊ตฌํ˜„

  1. ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 0 ๋˜๋Š” 1์ธ ๊ฒฝ์šฐ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ํŒ๋‹จํ•œ๋‹ค.

  2. 1๋ฒˆ์— ํ•ด๋‹นํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ๋Š” ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ ๋‘ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋‚˜๋ˆˆ๋‹ค.

  3. ๊ฐ ์„œ๋ธŒ ๋ฆฌ์ŠคํŠธ๋ฅผ, ์žฌ๊ท€๋กœ ํ•ฉ๋ณ‘ ์ก๋ ฌ์„ ์ด์šฉํ•ด์„œ ์ •๋ ฌํ•œ๋‹ค.

  4. ๋‘ ์„œ๋ธŒ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋กœ ํ•ฉ์นœ๋‹ค.

Last updated