์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์š”์•ฝ์ •๋ฆฌ

๐Ÿ˜‚ ๋“ค์–ด๊ฐ€๋ฉฐ

๊ธฐ์ˆ ๋ฉด์ ‘์„ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๋˜์ค‘, ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ด€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์—ˆ๋Š”๋ฐ ์‰ฝ๊ฒŒ ๋‹ต๋ณ€ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋ถ„๋ช… ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ณ  ๊ตฌํ˜„ํ•ด๋ณด์•˜์—ˆ๋Š”๋ฐ ๊ธฐ๋ก์œผ๋กœ ๋‚จ๊ฒจ๋‘์ง€ ์•Š์œผ๋‹ˆ ํœ˜๋ฐœ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ธฐ๋ณธ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜?

๋จผ์ € ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ๋ชฉ๋ก ์•ˆ์— ์ €์žฅ๋œ ์š”์†Œ๋“ค์„ ํŠน์ •ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋œปํ•œ๋‹ค.
ํšจ์œจ์ ์ธ ์ •๋ ฌ์„ ์œ„ํ•ด ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ •๋ ฌ์‹œ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์œผ๋กœ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์•ˆ์ •์„ฑ(safety๊ฐ€ ์•„๋‹ˆ๋ผ stable -> ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š๋ƒ ์—ฌ๋ถ€ ๋ฌธ์ œ) ๋“ฑ์ด ์žˆ๋‹ค.

๋ชจ๋“ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ตœ์„ ์˜ ์ •๋‹ต์„ ๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—†์œผ๋ฏ€๋กœ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํŠน์„ฑ์— ๋Œ€ํ•ด ์ž˜ ์•Œ์•„๋‘๊ณ  ์ ์ ˆํ•œ ์ƒํ™ฉ์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํƒํ•ด์•ผํ•œ๋‹ค.

๊ธฐ์ดˆ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 5๊ฐœ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort)

๋ฒ„๋ธ”์ •๋ ฌ์€ ์„œ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ์š”์†Œ ๊ฐ„์˜ ๋Œ€์†Œ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ •๋ ฌํ•œ๋‹ค.
๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋‹จ์ˆœํ•œ ๋งŒํผ ๋น„ํšจ์œจ์ ์ด๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ตœ๊ณ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘O(n^2)์ด๋ฉฐ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ O(n)์ด๋‹ค.
๋™์ž‘ ๋ฐฉ์‹์€ ์ธ์ ‘ํ•œ ๋‘ ์š”์†Œ๊ฐ„์˜ ๋Œ€์†Œ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

Bubble Sort

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ, ๊ฐ ๋ฐ˜๋ณต์‹œ ์ธ์ ‘ ์š”์†Œ๋ฅผ ๋น„๊ตํ•ด ๋ฐ”๊พธ์–ด์ฃผ๋Š”๊ฒƒ์ด๋‹ค. ๋ฐ˜๋ณต์‹œ๋งˆ๋‹ค ๊ฐ€์žฅ ํฐ ์š”์†Œ๋Š” ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ œ์™ธํ•˜๋ฉด์„œ ๋ฐ˜๋ณตํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const swap = (arr, i, j) => {
[arr[i], arr[j]] = [arr[j], arr[i]];
};

const bubbleSort = (arr) => {
const sortedArr = [...arr];
const len = sortedArr.length;

for (let i = 0; i < len; i++) {
for (let j = 0; j < len - i - 1; j++) {
if (sortedArr[j] > sortedArr[j + 1]) swap(sortedArr, j, j + 1);
}
}

return sortedArr;
};

์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)

์‚ฝ์ž… ์ •๋ ฌ์ด๋ž€ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•  ์›์†Œ์˜ index๋ณด๋‹ค ๋‚ฎ์€ ๊ณณ์— ์žˆ๋Š” ์›์†Œ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ์•Œ๋งž์€ ์œ„์น˜์— ์‚ฝ์ž…ํ•ด์ฃผ๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ๊ณ„์†ํ•ด์„œ ์ •๋ ฌ์ด ์ง„ํ–‰๋˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๋งจ ์™ผ์ชฝ index๊นŒ์ง€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
๋ชจ๋‘ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” Optimalํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ์›์†Œ๊ฐ€ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋น„๊ต๋˜๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ O(n)์ด๋‹ค.

Insertion Sort

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฒซ ๋ฒˆ์งธ for๋ฌธ์€ ์ •๋ ฌํ•  ์›์†Œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๋‘ ๋ฒˆ์งธ for๋ฌธ์€ ์ •๋ ฌํ•  ์›์†Œ๋ณด๋‹ค ์•„๋ž˜ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const swap = (arr, i, j) => {
[arr[i], arr[j]] = [arr[j], arr[i]];
};

const insertionSort = (arr) => {
const SortedArr = [...arr];
const len = SortedArr.length;

for (let i = 1; i < len; i++) {
for (let j = i; j >= 0; j--) {
if (SortedArr[j - 1] > SortedArr[j]) swap(SortedArr, j - 1, j);
}
}

return SortedArr;
};

์„ ํƒ ์ •๋ ฌ(Selection Sort)

์„ ํƒ ์ •๋ ฌ์ด๋ž€ ๋ฐฐ์—ด์—์„œ ์ตœ์†Œ๊ฐ’์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฐพ์•„ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์‹œ๊ฐ„๋ณต์žก๋„ ์ตœ์„ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘ O(n^2)์— ํ•ด๋‹นํ•˜๋Š” ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •๋ ฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ํ™•์ธํ•œ๋‹ค.

Selection Sort

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๋ฐฐ์—ด์—์„œ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„ ๋งจ ์•ž์˜ ๊ฐ’๊ณผ ๋ฐ”๊พผ๋‹ค. ๋ฐ”๊ฟ”์ค€ ๋งจ ์•ž ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const swap = (arr, i, j) => {
[arr[i], arr[j]] = [arr[j], arr[i]];
};

const selectionSort = (arr) => {
const SortedArr = [...arr];
const len = SortedArr.length;

for (let i = 0; i < len; i++) {
let min = i;
for (let j = i + 1; j < len; j++) {
if (SortedArr[min] > SortedArr[j]) min = j;
}
swap(SortedArr, i, min);
}

return SortedArr;
};

๋ง๋ถ™์—ฌ ์„ ํƒ ์ •๋ ฌ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ์ตœ์†Œ ์„ ํƒ ์ •๋ ฌ๊ณผ, ์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ์ด ์žˆ๋‹ค.
์ตœ์†Œ ์„ ํƒ ์ •๋ ฌ์€ ์œ„์ฒ˜๋Ÿผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๊ณ  ์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ€ต ์ •๋ ฌ (Quick Sort)

ํ€ต ์ •๋ ฌ์€ ๋ถ„ํ• ์ •๋ณต๋ฒ•๊ณผ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํŒŒ์ด์ฌ์ด๋‚˜ ์ž๋ฐ”์—์„œ ์–ธ์–ด์—์„œ ์ž์ฒด ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ํ€ต ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ ์ตœ์„ ๊ณผ ํ‰๊ท ์ผ ๋•Œ O(nlogn)์ด๋ฉฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” O(n^2)์ด๋‹ค.
๊ณต๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ ์ •๋ ฌ๋œ ์›์†Œ๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์ด ํ•˜๋‚˜ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ O(n)์ด๋‹ค.

Quick Sort

ํ€ต ์ •๋ ฌ์—๋Š” ํ”ผ๋ด‡(Pivot)์ด๋ผ๋Š” ๊ฐœ๋…์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ”ผ๋ด‡์€ ํ•œ ๋งˆ๋””๋กœ ์ •๋ ฌ ๋  ๊ธฐ์ค€ ์›์†Œ๋ฅผ ๋œปํ•œ๋‹ค.
ํ”ผ๋ด‡ ์„ ํƒ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ€ต ์ •๋ ฌ์˜ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์ง€๋Š”๋ฐ ์ตœ์ ์˜ ํ”ผ๋ด‡ ์„ ํƒ์ด ์–ด๋ ค์›Œ ๋ณดํ†ต ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ด๋‚˜ ์ค‘์•™ ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค.

ํ€ต ์ •๋ ฌ์˜ ๋™์ž‘๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๊ฐ€๋ น ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด [29, 10, 14, 37, 1, 40]์ด ์žˆ๊ณ , ํ”ผ๋ด‡์„ ์ž„์˜๋กœ 29๋ฅผ ์„ ํƒํ–ˆ๋‹ค ๊ฐ€์ •ํ•˜์ž.
์ดํ›„ 4๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์€ ๊ฒƒ์€ ์™ผ์ชฝ์œผ๋กœ ํฐ ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ณด๋‚ด [10, 14, 1] < 29 < [37, 40]์„ ์ƒ์„ฑํ•œ๋‹ค.
๋‹ค์‹œ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ž„์˜์˜ ํ”ผ๋ด‡ 10์„ ์„ค์ •ํ•˜์—ฌ [1] < 10 < [14]๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์—์„  ์ž„์˜์˜ ํ”ผ๋ด‡ 37์„ ์„ค์ •ํ•˜์—ฌ 37 < [40]์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด๋ผ๋ฉด ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ถ„ํ• ๋œ ๋ฐฐ์—ด์„ ํ•ฉ์ณ์ค€๋‹ค.

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const quickSort = (arr) => {
if (arr.length === 0) return [];

const pivot = arr[0];
const left = [];
const right = [];

for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) left.push(arr[i]);
else right.push(arr[i]);
}

return quickSort(left).concat(pivot, quickSort(right));
};

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

๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ถ„ํ• ์ •๋ณต๊ณผ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ ์ตœ์„ , ํ‰๊ท , ์ตœ์•… ๋ชจ๋‘ O(nlogn)์ด๋ฉฐ ๊ณต๊ฐ„ ๋ณต์žก๋„์˜ ๊ฒฝ์šฐ ์ •๋ ฌ๋œ ์›์†Œ๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด์ด ํ•˜๋‚˜ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ O(n)์ด๋‹ค.
.

Merge Sort

ํ€ต ์ •๋ ฌ๊ณผ ํ•จ๊ป˜ ๋‘ ๊ฐœ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๊ณตํ†ต์ ์„ ๊ฐ€์ง„๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ€ต ์ •๋ ฌ์ด ํ”ผ๋ด‡ ์„ ํƒํ›„ ํ”ผ๋ด‡์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์†Œ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐ˜๋ฉด, ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜์ผ๋•Œ๊นŒ์ง€ ์ด๋ถ„ํ•  ํ•œ ๋‹ค์Œ, ๋Œ€์†Œ๊ด€๊ณ„์— ๋”ฐ๋ผ ์žฌ๋ฐฐ์—ด ํ•˜๋ฉฐ ์›๋ž˜ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด [29, 10, 14, 37, 1, 40]์ด ์žˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ๋กœ [29, 10, 14]์™€ [37, 1, 40]์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
๋‘ ๋ฒˆ์งธ๋กœ [29, 10], [14], [37, 1], [40]์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
์„ธ ๋ฒˆ์งธ๋กœ [29], [10], [14], [37], [1], [40]์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๋ถ„๋ฆฌ๋˜๋ฉด ๋Œ€์†Œ ๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ณ‘ํ•ฉ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
์ฒซ ๋ฒˆ์งธ๋กœ [10, 29], [14], [1, 37], [40]์ด ๋˜๋ฉฐ, ๋‘ ๋ฒˆ์งธ๋Š” [10, 14, 29], [1, 37, 40]์ด ๋œ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ๋ณ‘ํ•ฉ๋˜๋ฉด์„œ [1, 10, 14, 29, 37, 40]์™€ ๊ฐ™์ด ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ๋‹ค.

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const merge = (left, right) => {
const result = [];
while (left.length !== 0 && right.length !== 0) {
if (left[0] < right[0]) result.push(left.shift());
else result.push(right.shift());
}

return [...result, ...left, ...right];
};

const mergeSort = (arr) => {
if (arr.length === 1) return arr;

const middleIndex = Math.ceil(arr.length / 2);
const left = arr.slice(0, middleIndex);
const right = arr.slice(middleIndex);

return merge(mergeSort(left), mergeSort(right));
};

๋งˆ์น˜๋ฉฐ

์œ„์—์„œ ์ •๋ฆฌํ•œ 5๊ฐ€์ง€์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์™ธ์—๋„ ํž™ ์ •๋ ฌ, ํŒ€ ์ •๋ ฌ๋“ฑ ์ •๋ง ๋งŽ์€ ์ •๋ ฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.
๋ชจ๋“  ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ๋‹ค ํƒ๊ตฌํ•˜๊ณ  ์™ธ์šฐ๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด์•ผ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ๊พธ์ค€ํžˆ CS ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค๐Ÿ”ฅ