Sort

์ •๋ ฌ์ด๋ž€ ๋ฌผ๊ฑด์„ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‚˜์—ดํ•œ ๊ฒƒ์ด๋‹ค.

  • ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋น„ํšจ์œจ์  : ์‚ฝ์ž…, ์„ ํƒ, ๋ฒ„๋ธ” ์ •๋ ฌ

  • ๋ณต์žกํ•˜์ง€๋งŒ ํšจ์œจ์  : ํ€ต, ํžˆํ”„, ํ•ฉ๋ณ‘, ๊ธฐ์ˆ˜ ์ •๋ ฌ

์„ ํƒ์ •๋ ฌ(selection sort)

๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์ค‘์— ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

  2. ๊ทธ ๊ฐ’์„ ๋งจ ์•ž์— ์œ„์น˜ํ•œ ๊ฐ’๊ณผ ๊ต์ฒดํ•œ๋‹ค(ํŒจ์Šค(pass)).

  3. ๋งจ ์ฒ˜์Œ ์œ„์น˜๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค.

๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ๊ฐ€์ • ์•„๋ž˜, n๊ฐœ์˜ ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฐ์—๋Š” O(n^2) ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ์ด๋Š” ์ •๋ ฌํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 100๋ฐฐ ๋Š˜์–ด๋‚˜๋ฉด ์ด๋ก ์ ์œผ๋กœ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ 10,000๋ฐฐ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฝ์ž…์ •๋ ฌ(insertion sort)

์ž๋ฃŒ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ถ€๋ถ„๊ณผ ๋น„๊ตํ•˜์—ฌ, ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์ •๋ ฌ์„ ์™„์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

  • ๋ณต์žก๋„

    • ์ตœ์„ ์˜ ๊ฒฝ์šฐ(์ด๋ฏธ ์ •๋ ฌ) : O(n)

    • ์ตœ์•…์˜ ๊ฒฝ์šฐ(์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ) : O(n^2)

๋ณดํ†ต ์‚ฝ์ž… ์ •๋ ฌ์ด ํ€ต ์ •๋ ฌ๋ณด๋‹ค ๋น„ํšจ์œจ ์ ์ด๋‚˜, ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ€ต์ •๋ ฌ๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด, ์‚ฝ์ž… ์ •๋ ฌ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค.

๋ฒ„๋ธ”์ •๋ ฌ(bubble sort)

์ธ์ ํ•œ 2๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ˆœ์„œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ๊ตํ™˜ํ•œ๋‹ค.

  • ๋ณต์žก๋„(์ตœ์ƒ, ํ‰๊ท , ์ตœ์•…) : O(n^2)

ํ•ฉ๋ณ‘ ์ •๋ ฌ(merge_sort)

  1. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‘ ๊ฐœ์˜ ๊ท ๋“ฑํ•œ ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๋ถ„ํ• ๋œ ๋ถ€๋ถ„๋ฆฌ์‹œํŠธ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

  2. ์ •๋ ฌ๋œ ๋‘๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉํ•˜์—ฌ ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

  • ๋ณต์žก๋„ : O(n*log(n))

๊ธฐ์ˆ˜์ •๋ ฌ(Radix Sort)

๊ธฐ์ˆ˜ ์ •๋ ฌ์€ ์ •์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ฎ์€ ์ž๋ฆฌ์ˆ˜๋ถ€ํ„ฐ ๋น„๊ตํ•ด ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 3์ž๋ฆฌ ์ˆ˜๋ผ๋ฉด 1์˜์ž๋ฆฌ, 10์˜์ž๋ฆฌ , 100์˜ ์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•ด์„œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ๋ณต์žก๋„ : O(dn) d๋Š” ์ž๋ฆฟ์ˆ˜

ํ€ต์ •๋ ฌ(Quick sort)

  1. pivot(๊ธฐ์ค€๊ฐ’) ์ •ํ•˜๊ธฐ

  2. pivot๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค์€ ์™ผ์ชฝ, ํฐ ์›์†Œ๋Š” ์˜ค๋ฅธ์ชฝ

  3. pivot์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฐ์—ด๊ณผ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ์ •ํ•˜๊ณ  ๊ฐ ๋ฐฐ์—ด๊ตฌ๊ฐ„์—์„œ 1๋ฒˆ๊ณผ์ • ์žฌ๊ท€์  ๋ฐ˜๋ณต

  4. ์ผ๋ฐ˜์ ์œผ๋กœ ์ฒ˜์Œ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ pivot์œผ๋กœ ์žก๋Š”๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    • ํ‰๊ท ์  : O(nlog(n))

    • ์ตœ์•…์˜ ๊ฒฝ์šฐ : O(N^2)

๋ฐ์ดํ„ฐ ์ˆ˜

N^2(์„ ํƒ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ)

NlogN(ํ€ต ์ •๋ ฌ)

1,000

์•ฝ 1,000,000

์•ฝ 10,000

1,000,000

์•ฝ 1,000,000,000,000

์•ฝ 20,000,000

๋‹ค๋งŒ ํ€ต์ •๋ ฌ์€ ํ‰๊ท ์ ์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(NlogN)์ด์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ(์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ) O(N^2)์ธ ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.

ํž™ ์ •๋ ฌ(heap sort)

  1. n๊ฐœ์˜ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด๋•Œ ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ถ€๋…ธ๋“œ, ์™ผ์ชฝ ์ž๋…ธ๋“œ, ์˜ค๋ฅธ์ชฝ ์ž๋…ธ๋“œ ์ˆœ์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

  2. ์ตœ๋Œ€ ํž™์„ ๊ตฌ์„ฑํ•œ๋‹ค.

  3. ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์š”์†Œ๋ฅผ ํž™์—์„œ ์‚ญ์ œํ•˜๋ฉด์„œ ์ €์žฅํ•œ๋‹ค.

ํž™ ์ •๋ ฌ์ด ์ตœ๋Œ€๋กœ ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋Š” ์ „์ฒด ์ž๋ฃŒ๊ฐ€ ์•„๋‹Œ ๊ฐ€์žฅ ํฐ ๊ฐ’ ๋ช‡๊ฐœ๋งŒ ํ•„์š”ํ•  ๋•Œ์ด๋‹ค.

๊ตฌํ˜„

  • ํž™๊ตฌํ˜„์€ ํž™(heap)์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ณต์žก๋„

    • ํž™ ์‚ญ์ œ ์‹œ๊ฐ„ O(logn)n = *O(nlogn)

๊ณ„์ˆ˜ ์ •๋ ฌ(Count Sort)

๊ณ„์ˆ˜ ์ •๋ ฌ์€ ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘์˜ ์ •์ˆ˜์ธ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N, ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ๋Œ€๊ฐ’์ด K์ผ ๋•Œ, ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆ˜ํ–‰์‹œ๊ฐ„ O(N+K)๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ๋ฌดํ•œํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ค์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์ด๊ฐ€ 1,000,000์„ ๋„˜์ง€ ์•Š์„ ๋•Œ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ ฌ (12) - ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort)

๊ณ„์ˆ˜ ์ •๋ ฌ์€ ์œ„์™€ ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ๊ธฐ์— ์ œํ•œ์ด ์žˆ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N+K), ์ตœ๋Œ€๊ฐ’ ํฌ๊ธฐ K, ๋ฐ์ดํ„ฐ์ˆ˜ N

ํŒŒ์ด์ฌ 3.7 ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

๋ฐ์ดํ„ฐ ์ˆ˜(N)

์„ ํƒ ์ •๋ ฌ

ํ€ต ์ •๋ ฌ

๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

100

0.0123

0.00156

0.00000753

1000

0.354

0.00343

0.0000365

10000

15.475

0.0312

0.000248

์„ ํƒ ์ •๋ ฌ์€ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ด ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋งค์šฐ ๋น„ํšจ์œจ ์ ์ด์ง€๋งŒ, ํŠน์ •ํ•œ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„๋•Œ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

sorted()

ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” sorted()๋Š” ํ€ต์ •๋ ฌ ๊ณผ ๋™์ž‘ ๋ฐฉ์‹์ด ๋น„์Šทํ•œ ๋ณ‘ํ•ฉ ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜(๋ณ‘ํ•ฉ ์ •๋ ฌ + ์‚ฝ์ž…์ •๋ ฌ)์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ํ€ต์ •๋ ฌ๋ณด๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ๋А๋ฆฌ์ง€๋งŒ, ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(NlogN) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜•์„ ๋ฐ›์•„์„œ ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ •๋ ฌ์‹œ์— Key ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, key๊ฐ’์œผ๋กœ๋Š” ์ •๋ ฌ ๊ธฐ์ค€์˜ ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

sort()

๋ฆฌ์ŠคํŠธ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ์„ ๋•Œ ๋‚ด๋ถ€ ์›์†Œ๋ฅผ ๋ฐ”๋กœ ์ •๋ ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. sort() ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ์›์†Œ๊ฐ€ ๋ฐ”๋กœ ์ •๋ ฌ๋œ๋‹ค.

์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•ญ์ƒ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„๋ณต์žก๋„ O(NlogN)์„ ๋ณด์žฅํ•œ๋‹ค.

Last updated

Was this helpful?