Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ๋Š” ์ฃผ์š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 8๊ฐ€์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ •๋ฆฌํ•œ๋‹ค.


๋ฌธ์„œ ๋ชฉ๋ก

ํŒŒ์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
bubble_sort.md ๋ฒ„๋ธ” ์ •๋ ฌ
selection_sort.md ์„ ํƒ ์ •๋ ฌ
insertion_sort.md ์‚ฝ์ž… ์ •๋ ฌ
merge_sort.md ๋ณ‘ํ•ฉ ์ •๋ ฌ
quick_sort.md ํ€ต ์ •๋ ฌ
heap_sort.md ํž™ ์ •๋ ฌ
counting_sort.md ๊ณ„์ˆ˜ ์ •๋ ฌ
radix_sort.md ๊ธฐ์ˆ˜ ์ •๋ ฌ

๋ถ„๋ฅ˜ 1 โ€” ๋น„๊ต ๊ธฐ๋ฐ˜ vs ๋น„๋น„๊ต ๊ธฐ๋ฐ˜

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์ด๋‹ค.

๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ(Comparison Sort) ์€ ๋‘ ์›์†Œ๋ฅผ >, < ๋“ฑ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๋น„๊ตํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ •๋ณด ์ด๋ก ์— ์˜ํ•ด ์ตœ์•…์˜ ๊ฒฝ์šฐ ฮฉ(n log n) ๋น„๊ต๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด ์ˆ˜ํ•™์ ์œผ๋กœ ์ฆ๋ช…๋˜์–ด ์žˆ๋‹ค.

๋น„๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ(Non-comparison Sort) ์€ ์›์†Œ์˜ ๊ฐ’ ์ž์ฒด(์ž๋ฆฟ์ˆ˜, ๋นˆ๋„)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๊ต ์—†์ด ์ •๋ ฌํ•œ๋‹ค. ์ด๋ก ์  ํ•˜ํ•œ์„ ์šฐํšŒํ•ด O(n) ์— ๊ทผ์ ‘ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์กฐ๊ฑด์ด ์กด์žฌํ•œ๋‹ค.

๊ตฌ๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ์  ํ•˜ํ•œ
๋น„๊ต ๊ธฐ๋ฐ˜ ๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž…, ๋ณ‘ํ•ฉ, ํ€ต, ํž™ ฮฉ(n log n)
๋น„๋น„๊ต ๊ธฐ๋ฐ˜ ๊ณ„์ˆ˜, ๊ธฐ์ˆ˜ O(n) ๊ฐ€๋Šฅ

๋ถ„๋ฅ˜ 2 โ€” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจ๋Ÿฌ๋‹ค์ž„

์–ด๋–ค ์ „๋žต์œผ๋กœ ์ •๋ ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๋‹จ์ˆœ ๋ฐ˜๋ณต (Brute-force)

๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ์ธ์ ‘ ๋น„๊ตยท๊ตํ™˜ ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’ ํƒ์ƒ‰์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•˜์ง€๋งŒ O(nยฒ)์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด
๋ฒ„๋ธ” ์ •๋ ฌ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๋น„๊ตํ•ด ๊ตํ™˜ ๋ฐ˜๋ณต
์„ ํƒ ์ •๋ ฌ ๋ฏธ์ •๋ ฌ ๊ตฌ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ์„ ํƒํ•ด ์ œ์ž๋ฆฌ์— ๋ฐฐ์น˜
์‚ฝ์ž… ์ •๋ ฌ ๋ฏธ์ •๋ ฌ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๊ตฌ๊ฐ„์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…

๋ถ„ํ•  ์ •๋ณต (Divide & Conquer)

๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ  ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. O(n log n)์ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด
๋ณ‘ํ•ฉ ์ •๋ ฌ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ  ๊ฐ๊ฐ ์ •๋ ฌ ํ›„ ๋ณ‘ํ•ฉ
ํ€ต ์ •๋ ฌ ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ๋ถ„ํ•  ํ›„ ๊ฐ ๋ถ€๋ถ„ ์žฌ๊ท€ ์ •๋ ฌ

์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ (Heap)

ํŠน์ˆ˜ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์„ฑ์งˆ์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด
ํž™ ์ •๋ ฌ ์ตœ๋Œ€ ํž™์œผ๋กœ ๊ตฌ์„ฑ ํ›„ ๋ฃจํŠธ(์ตœ๋Œ“๊ฐ’)๋ฅผ ๋ฐ˜๋ณต ์ถ”์ถœ

๋ถ„ํฌ ๊ธฐ๋ฐ˜ (Distribution)

์›์†Œ์˜ ๊ฐ’ ๋ถ„ํฌ๋ฅผ ํ™œ์šฉํ•ด ๋น„๊ต ์—†์ด ์ •๋ ฌํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด
๊ณ„์ˆ˜ ์ •๋ ฌ ๊ฐ ๊ฐ’์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ด
๊ธฐ์ˆ˜ ์ •๋ ฌ ์ž๋ฆฟ์ˆ˜ ๋‹จ์œ„๋กœ ๋ฐ˜๋ณต ๊ณ„์ˆ˜ ์ •๋ ฌ ์ ์šฉ

๋ถ„๋ฅ˜ 3 โ€” ์‹œ๊ฐ„ ๋ณต์žก๋„

๋ณต์žก๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กฐ๊ฑด
O(n) ์‚ฝ์ž… ์ •๋ ฌ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด (์ตœ์„ )
O(n) ๊ณ„์ˆ˜ ์ •๋ ฌ, ๊ธฐ์ˆ˜ ์ •๋ ฌ ๊ฐ’ ๋ฒ”์œ„ k = O(n) ์กฐ๊ฑด ํ•˜
O(n log n) ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํž™ ์ •๋ ฌ ํ•ญ์ƒ ๋ณด์žฅ
O(n log n) ํ€ต ์ •๋ ฌ ํ‰๊ท  (์ตœ์•…์€ O(nยฒ))
O(nยฒ) ๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž… ํ‰๊ท ยท์ตœ์•…

๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ์—์„œ ํ•ญ์ƒ O(n log n)์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์€ ๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ํž™ ์ •๋ ฌ๋ฟ์ด๋‹ค.
ํ€ต ์ •๋ ฌ์€ ํ‰๊ท ์ ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด์ง€๋งŒ ์ตœ์•…์€ O(nยฒ)์ด๋‹ค.


๋ถ„๋ฅ˜ 4 โ€” ๊ณต๊ฐ„ ๋ณต์žก๋„ (์ œ์ž๋ฆฌ ์ •๋ ฌ ์—ฌ๋ถ€)

๊ตฌ๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๊ฐ„ ๋ณต์žก๋„
์ œ์ž๋ฆฌ O(1) ๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž…, ํž™ O(1)
์Šคํƒ O(log n) ํ€ต (์žฌ๊ท€ ์Šคํƒ) O(log n)
์ถ”๊ฐ€ ๋ฐฐ์—ด ํ•„์š” ๋ณ‘ํ•ฉ O(n)
์นด์šดํŠธ ๋ฐฐ์—ด ํ•„์š” ๊ณ„์ˆ˜ O(k)
์ถœ๋ ฅ ๋ฐฐ์—ด ํ•„์š” ๊ธฐ์ˆ˜ O(n + k)

์ตœ์•… O(n log n) + ๊ณต๊ฐ„ O(1) ์„ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋Š” ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ์€ ํž™ ์ •๋ ฌ๋ฟ์ด๋‹ค.


๋ถ„๋ฅ˜ 5 โ€” ์•ˆ์ •์„ฑ (Stability)

๋™์ผํ•œ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋“ค์˜ ์›๋ž˜ ์ƒ๋Œ€์  ์ˆœ์„œ๊ฐ€ ์ •๋ ฌ ํ›„์—๋„ ์œ ์ง€๋˜๋Š”์ง€ ์—ฌ๋ถ€.

๋‹ค์ค‘ ํ‚ค ์ •๋ ฌ(์˜ˆ: ์ด๋ฆ„์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜์ด๋กœ ๋‹ค์‹œ ์ •๋ ฌ)์ด๋‚˜ ๊ธฐ์ˆ˜ ์ •๋ ฌ์˜ ์„œ๋ธŒ๋ฃจํ‹ด์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์•ˆ์ •์„ฑ์ด ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋œ๋‹ค.

๊ตฌ๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜
์•ˆ์ • (Stable) ๋ฒ„๋ธ”, ์‚ฝ์ž…, ๋ณ‘ํ•ฉ, ๊ณ„์ˆ˜, ๊ธฐ์ˆ˜
๋ถˆ์•ˆ์ • (Unstable) ์„ ํƒ, ํ€ต, ํž™

๋ถ„๋ฅ˜ 6 โ€” ์ ์‘์„ฑ (Adaptivity)

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ๋ถ€๋ถ„์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์—ฌ๋ถ€.

๊ตฌ๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์œ 
์ ์‘์  (Adaptive) ์‚ฝ์ž…, ๋ฒ„๋ธ” (์กฐ๊ธฐ ์ข…๋ฃŒ) ์ •๋ ฌ๋œ ๊ตฌ๊ฐ„์€ ๋น„๊ต๋งŒ ํ•˜๊ณ  ์ด๋™ ์—†์Œ
๋น„์ ์‘์  (Non-adaptive) ์„ ํƒ, ํž™, ๋ณ‘ํ•ฉ, ํ€ต, ๊ณ„์ˆ˜, ๊ธฐ์ˆ˜ ์ž…๋ ฅ ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ผํ•œ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

Java์˜ Tim Sort(์‚ฝ์ž… + ๋ณ‘ํ•ฉ)๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ๋น ๋ฅธ ์ด์œ ๊ฐ€ ์ ์‘์„ฑ ๋•Œ๋ฌธ์ด๋‹ค.


๋ถ„๋ฅ˜ 7 โ€” ์ ์šฉ ๊ฐ€๋Šฅ ์กฐ๊ฑด

๊ตฌ๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กฐ๊ฑด
๋ฒ”์šฉ ๋ฒ„๋ธ”, ์„ ํƒ, ์‚ฝ์ž…, ๋ณ‘ํ•ฉ, ํ€ต, ํž™ ๋น„๊ต ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ
์ •์ˆ˜ ํ•œ์ • ๊ณ„์ˆ˜, ๊ธฐ์ˆ˜ ์ •์ˆ˜ ๋˜๋Š” ์ •์ˆ˜๋กœ ๋งคํ•‘ ๊ฐ€๋Šฅํ•œ ๊ฐ’
๋ฒ”์œ„ ์ œํ•œ ๊ณ„์ˆ˜ ๊ฐ’์˜ ๋ฒ”์œ„ k๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์•„์•ผ ํ•จ
์ž๋ฆฟ์ˆ˜ ๊ณ ์ • ๊ธฐ์ˆ˜ ์ž๋ฆฟ์ˆ˜ d๊ฐ€ ์ž‘์•„์•ผ ํšจ์œจ์ 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ„ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ

๊ฐœ๋ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„˜์–ด ์„œ๋กœ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด ์ •๋ ฌ์„ ๋” ๊นŠ์ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ญ์œ„(Inversion)์™€ ์ •๋ ฌ ์„ฑ๋Šฅ

์—ญ์œ„๋ž€ ๋ฐฐ์—ด์—์„œ i < j์ด์ง€๋งŒ arr[i] > arr[j]์ธ ์Œ์˜ ์ˆ˜๋‹ค. ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ ์ƒํƒœ์˜ ์—ญ์œ„ ์ˆ˜๋Š” 0์ด๋ฉฐ, ์—ญ์œ„๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ •๋ ฌ์ด ๋” ๋งŽ์€ ์ž‘์—…์„ ํ•„์š”๋กœ ํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ญ์œ„์™€์˜ ๊ด€๊ณ„
๋ฒ„๋ธ” ์ •๋ ฌ ๊ตํ™˜ ํšŸ์ˆ˜ = ์—ญ์œ„์˜ ์ˆ˜
์‚ฝ์ž… ์ •๋ ฌ ์ด ์ด๋™(shift) ํšŸ์ˆ˜ = ์—ญ์œ„์˜ ์ˆ˜. ์—ญ์œ„๊ฐ€ ์ ์„์ˆ˜๋ก ๋น ๋ฆ„ (์ ์‘์„ฑ์˜ ๊ทผ๊ฑฐ)
๋ณ‘ํ•ฉ ์ •๋ ฌ ๋ณ‘ํ•ฉ ์‹œ ์˜ค๋ฅธ์ชฝ ์›์†Œ๊ฐ€ ๋จผ์ € ์„ ํƒ๋  ๋•Œ๋งˆ๋‹ค ์—ญ์œ„๊ฐ€ ๋ˆ„์ ๋จ โ†’ O(n log n)์— ์—ญ์œ„ ์ด ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ

์—ญ์œ„ ์ˆ˜๊ฐ€ O(n)์ด๋ฉด ์‚ฝ์ž… ์ •๋ ฌ์ด O(n)์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์—ญ์œ„ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ(BOJ 1517)๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ๋กœ O(n log n)์— ํ•ด๊ฒฐํ•œ๋‹ค.

๊ณ„์ˆ˜ ์ •๋ ฌ โ†’ ๊ธฐ์ˆ˜ ์ •๋ ฌ

๊ธฐ์ˆ˜ ์ •๋ ฌ์€ ๊ณ„์ˆ˜ ์ •๋ ฌ์„ ์„œ๋ธŒ๋ฃจํ‹ด์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ ์ž๋ฆฟ์ˆ˜ ๋‹จ์œ„์˜ ์ •๋ ฌ์„ ๊ณ„์ˆ˜ ์ •๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด๋•Œ ๊ณ„์ˆ˜ ์ •๋ ฌ์ด ๋ฐ˜๋“œ์‹œ ์•ˆ์ • ์ •๋ ฌ์ด์–ด์•ผ ๋‚ฎ์€ ์ž๋ฆฌ์˜ ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ๋ณด์กด๋œ๋‹ค.

๊ธฐ์ˆ˜ ์ •๋ ฌ
  โ””โ”€ 1์˜ ์ž๋ฆฌ: ๊ณ„์ˆ˜ ์ •๋ ฌ (์•ˆ์ •)
  โ””โ”€ 10์˜ ์ž๋ฆฌ: ๊ณ„์ˆ˜ ์ •๋ ฌ (์•ˆ์ •)
  โ””โ”€ 100์˜ ์ž๋ฆฌ: ๊ณ„์ˆ˜ ์ •๋ ฌ (์•ˆ์ •)
  ...

๊ณ„์ˆ˜ ์ •๋ ฌ์ด ๋ถˆ์•ˆ์ •ํ•˜๋‹ค๋ฉด ์ž๋ฆฟ์ˆ˜๋ฅผ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์ด์ „ ์ •๋ ฌ ๊ฒฐ๊ณผ๊ฐ€ ๊นจ์ ธ ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ํ‹€๋ฆฐ๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ + ๋ณ‘ํ•ฉ ์ •๋ ฌ โ†’ Tim Sort

Java์˜ Arrays.sort(Object[]), Python์˜ sorted()์— ์‚ฌ์šฉ๋˜๋Š” Tim Sort๋Š” ๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ๋‹ค.

์—ญํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์œ 
์†Œ๊ทœ๋ชจ ๊ตฌ๊ฐ„ ์ •๋ ฌ ์‚ฝ์ž… ์ •๋ ฌ n์ด ์ž‘์„ ๋•Œ(โ‰ค32~64) ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ณ , ๋ถ€๋ถ„ ์ •๋ ฌ ์‹œ ์ ์‘์„ฑ ๋ฐœํœ˜
์ „์ฒด ๋ณ‘ํ•ฉ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•ˆ์ • ์ •๋ ฌ ๋ณด์žฅ, ํ•ญ์ƒ O(n log n)

์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์™„์ „ ๋ฌด์ž‘์œ„๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„ ์ •๋ ฌ๋œ ๊ตฌ๊ฐ„(run)์ด ๋งŽ์•„, Tim Sort๊ฐ€ ์ด๋ฅผ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค.


๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ์˜ ํ•˜ํ•œ: ์™œ O(n log n)์ด ์ตœ์„ ์ธ๊ฐ€

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

๊ฒฐ์ • ํŠธ๋ฆฌ(Decision Tree) ๋ชจ๋ธ

n๊ฐœ์˜ ์›์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์„ ์ด์ง„ ๊ฒฐ์ • ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ ๋‚ด๋ถ€ ๋…ธ๋“œ: ๋‘ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒฐ์ • (arr[i] < arr[j]?)
  • ๊ฐ ๋ฆฌํ”„ ๋…ธ๋“œ: ํ•˜๋‚˜์˜ ๊ฐ€๋Šฅํ•œ ์ •๋ ฌ ๊ฒฐ๊ณผ (์ˆœ์—ด)
  • n๊ฐœ์˜ ์›์†Œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ˆœ์—ด์˜ ์ˆ˜: n!

ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œ n!๊ฐœ ์ด์ƒ ์žˆ์–ด์•ผ ๋ชจ๋“  ์ž…๋ ฅ ์ˆœ์„œ๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋†’์ด๊ฐ€ h์ธ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋ฆฌํ”„ ์ˆ˜ = 2^h

๋”ฐ๋ผ์„œ: 2^h โ‰ฅ n!
โ†’ h โ‰ฅ logโ‚‚(n!)
โ†’ h โ‰ฅ ฮฉ(n log n)   (์Šคํ„ธ๋ง ๊ทผ์‚ฌ: log(n!) โ‰ˆ n log n)

์ฆ‰, ์–ด๋–ค ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ๋„ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ตœ์†Œ ฮฉ(n log n)๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

๋น„๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ์ด ์ด๋ฅผ ์šฐํšŒํ•˜๋Š” ์ด์œ 

๊ณ„์ˆ˜ยท๊ธฐ์ˆ˜ ์ •๋ ฌ์€ ์›์†Œ๋ฅผ ์ง์ ‘ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ  ๊ฐ’ ์ž์ฒด๋ฅผ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋กœ ํ™œ์šฉํ•œ๋‹ค. ๊ฒฐ์ • ํŠธ๋ฆฌ ๋ชจ๋ธ์ด ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ํ•˜ํ•œ์— ๊ตฌ์†๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ, ๊ทธ ๋Œ€์‹  ๋ฐ์ดํ„ฐ๊ฐ€ ์ •์ˆ˜์ด๊ฑฐ๋‚˜ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.


์ข…ํ•ฉ ๋น„๊ตํ‘œ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์„  ํ‰๊ท  ์ตœ์•… ๊ณต๊ฐ„ ์•ˆ์ • ์ ์‘ ํŒจ๋Ÿฌ๋‹ค์ž„
๋ฒ„๋ธ” ์ •๋ ฌ O(n) O(nยฒ) O(nยฒ) O(1) โœ… โœ… ๋‹จ์ˆœ ๋ฐ˜๋ณต
์„ ํƒ ์ •๋ ฌ O(nยฒ) O(nยฒ) O(nยฒ) O(1) โŒ โŒ ๋‹จ์ˆœ ๋ฐ˜๋ณต
์‚ฝ์ž… ์ •๋ ฌ O(n) O(nยฒ) O(nยฒ) O(1) โœ… โœ… ๋‹จ์ˆœ ๋ฐ˜๋ณต
๋ณ‘ํ•ฉ ์ •๋ ฌ O(n log n) O(n log n) O(n log n) O(n) โœ… โŒ ๋ถ„ํ•  ์ •๋ณต
ํ€ต ์ •๋ ฌ O(n log n) O(n log n) O(nยฒ) O(log n) โŒ โŒ ๋ถ„ํ•  ์ •๋ณต
ํž™ ์ •๋ ฌ O(n log n) O(n log n) O(n log n) O(1) โŒ โŒ ์ž๋ฃŒ๊ตฌ์กฐ
๊ณ„์ˆ˜ ์ •๋ ฌ O(n + k) O(n + k) O(n + k) O(k) โœ… โŒ ๋ถ„ํฌ ๊ธฐ๋ฐ˜
๊ธฐ์ˆ˜ ์ •๋ ฌ O(d(n+k)) O(d(n+k)) O(d(n+k)) O(n+k) โœ… โŒ ๋ถ„ํฌ ๊ธฐ๋ฐ˜

์„ ํƒ ๊ฐ€์ด๋“œ

๋ฐ์ดํ„ฐ๊ฐ€ ์ •์ˆ˜์ด๊ณ  ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ์ž‘๋‹ค (k โ‰ค 10^6)
    โ””โ”€โ†’ ๊ณ„์ˆ˜ ์ •๋ ฌ / ๊ธฐ์ˆ˜ ์ •๋ ฌ

๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค
    โ””โ”€โ†’ ์‚ฝ์ž… ์ •๋ ฌ

์•ˆ์ • ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค + ์ตœ์•…๋„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค
    โ””โ”€โ†’ ๋ณ‘ํ•ฉ ์ •๋ ฌ

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ œํ•œ์ ์ด๋‹ค + ์ตœ์•…๋„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค
    โ””โ”€โ†’ ํž™ ์ •๋ ฌ

์ผ๋ฐ˜์ ์ธ ๋ฒ”์šฉ ์ •๋ ฌ (๋น ๋ฅธ ํ‰๊ท  ์„ฑ๋Šฅ)
    โ””โ”€โ†’ ํ€ต ์ •๋ ฌ (๋žœ๋ค ํ”ผ๋ฒ—) ๋˜๋Š” Arrays.sort()

n์ด ์ž‘๋‹ค (n โ‰ค 1,000)
    โ””โ”€โ†’ ์‚ฝ์ž… ์ •๋ ฌ (๊ตฌํ˜„ ๋‹จ์ˆœ + ์˜ค๋ฒ„ํ—ค๋“œ ์ ์Œ)