-
๐๏ธ ์๋ฃ๊ตฌ์กฐ ๊ณต๋ถํ๊ธฐ 4 | ๋ณํฉ ์ ๋ ฌ(merge sort)data structure 2021. 1. 19. 09:05
๋ณํฉ ์ ๋ ฌ(merge sort)
๋ณํฉ ์ ๋ ฌ ๋๋ ํฉ๋ณ ์ ๋ ฌ์ ๋น๊ต ๊ธฐ๋ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ ๋ ฌ๋ ๋ ๊ฐ์ ๋ฐฐ์ด์ด ์๋ค๊ณ ํ์.
let arr1 = [4,6,7,8]; let arr2 = [1,5,6,7]; let result = [];
์ ๋ ฌ๋ ๋ ๋ฐฐ์ด์ ํ๋์ ๋ฐฐ์ด๋ก ํฉ์น๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น?
๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ๋ ๋ฐฐ์ด์ด ์ ๋ ฌ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์์ ๊ฐ๋ผ๋ฆฌ ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ๊ฐ์ฅ ์์ ๊ฐ์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ ์์นํ ์์์ด๋ค.
์ฒ์์๋ 4์ 1์ ๋น๊ตํ๋๋ฐ 1์ด 4๋ณด๋ค ์์ผ๋ฏ๋ก result์ 1์ด ๋จผ์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
4 > 1 result.push(1);
๊ทธ ๋ค์ ๋น๊ต๋์์ 4์ 1์ ๋ค์ ์ซ์์ธ 5์ด๋ค.
4 < 5 result.push(4);
๋ ์์ ์ซ์์ธ 4๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๊ณ ์ด ๊ณผ์ ์ ๊ณ์ ๋ฐ๋ณตํ๊ฒ ๋๋ฉด ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๊ฒ ๋๋ค.
console.log(result); //[1,4,5,6,6,7,7,8];
๊ทธ๋ผ ์ด๋ฒ์ ์ ๋ ฌ๋์ง ์์ ํ๋์ ๋ฐฐ์ด์ ํ๋๋ก ํฉ์ณ๋ณด์
์๊น์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํด์๋ ์ผ๋จ ํ๋์ ๋ฐฐ์ด์ 2๊ฐ๋ก ๋๋์ด์ผ ํ๋ค.
let arr = [4,6,2,3,8,1,9,7] let leftArr = [4,6,2,3]; let rightArr = [8,1,9,7];
leftArr, rightArr๋ฅผ ๋ ๋ค์ ๋๊ฐ๋ก ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ด์ ์์๊ฐ ๋๋ ์ก๋ค๋ฉด, ๋๊ฐ๊ฐ ํ ์์ ์ด๋ฃจ์ด์ ์ ๋ ฌ๋๋ฉด ๋๋ค.
์ ๋ ฌ๋ ๊ฒ๋ค์ ๋ค์ ๋ ๋ฌถ์์ฉ ํด์ ์ ๋ ฌ๋ ๋ ๋ฐฐ์ด์ ์ ๋ ฌํด์ฃผ๋ฉด ๋๋ค!
๋จธ์ง ์ํธ์ ์๊ฐ๋ณต์ก๋๋ ์ด๋ป๊ฒ ๋ ๊น?
n๊ฐ์ ์์๋ฅผ log n๋ฒ ์ฌ๊ท๋ฅผ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ O(nlogn)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๊ฒ ๋๋ค.
log n ์ ์ฒ์ 8๊ฐ์ ์์์์ 4๊ฐ์ฉ, 2๊ฐ์ฉ ์ด๋ ๊ฒ ํ์ํด์ผํ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ฉ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ด๋ค.
[์ฐธ๊ณ ์๋ฃ]
'data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ