Yuu's 2023. 3. 22. 21:42
๋ฐ˜์‘ํ˜•

๐Ÿ’ซ์˜ค๋Š˜์˜ ๊นจ๋‹ฌ์Œ

1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ sort()

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ sort() ๋ฉ”์„œ๋“œ๋Š” "ํ€ต ์ •๋ ฌ"๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ, V8 ์—”์ง„์—์„œ๋Š” "์‚ฝ์ž… ์ •๋ ฌ"๊ณผ "ํ•ฉ๋ณ‘ ์ •๋ ฌ"์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋งŒ๋“  ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ "Tim sort"๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค sort() ๊ตฌํ˜„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค. ํŒŒ์ด์–ดํญ์Šค์˜ ๊ฒฝ์šฐ "ํ•ฉ๋ณ‘ ์ •๋ ฌ"์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ „๋‹ฌ์ธ์ž์ธ compareFunc()์„ ์ œ๊ณตํ•ด๋„ ๋˜๊ณ  ์•ˆํ•ด๋„ ๋˜๋Š”๋ฐ, ๋น„๊ตํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์š”์†Œ๋ฅผ ์ž๋™์œผ๋กœ ASCII ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค. ์ฆ‰, "[1, 4, 3, 10, 2, 5]"์˜ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ ๋น„๊ตํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ "[1, 10, 2, 3, 4, 5]" ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋œ๋‹ค.

compareFunc(elem1, elem2)๋ฅผ ์ œ๊ณตํ•  ๋•Œ๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ณ , ๋‚ฎ์œผ๋ฉด ์–‘์ˆ˜๋กค ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ๊ฐ™๋‹ค๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๋น„๊ต ๋ฐฉ์‹์„ "Three-way comparison"์ด๋ผ๊ณ  ํ•œ๋‹ค.

[JS] sort๋Š” ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ• ๊นŒ?
Three-way comparison
V8 Tim sort docs
MDN : compreFn

์ •๋ฆฌ

๋Œ€๋ถ€๋ถ„์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ€ต ์ •๋ ฌ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ... "Tim Sort" ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
sort() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋น„๊ตํ•จ์ˆ˜๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์ž.

๋ฐ˜์‘ํ˜•