230322 TIL
๐ซ์ค๋์ ๊นจ๋ฌ์
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() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋น๊ตํจ์๋ฅผ ๊ฐ์ด ์ฌ์ฉํ์.