Sorting

๊ฐฑ๋‘ยท2021๋…„ 12์›” 27์ผ
0

๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ

๋ชฉ๋ก ๋ณด๊ธฐ
4/7

๐Ÿ“Œ Sorting

๋ฆฌ์ŠคํŠธ๋ฅผ ์–ด๋–ค ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฐฐ์—ดํ•˜๋Š” ๊ฒƒ - ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ, ์•ŒํŒŒ๋ฒณ ์ˆœ ,, ๋“ฑ๋“ฑ

โœ”๏ธ Internal sorting
์ฃผ๊ธฐ์–ต์žฅ์น˜์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์กด์˜ Sorting

โœ”๏ธ External sorting
์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ๋ณด์กฐ ๊ธฐ์–ต ์žฅ์น˜์— ์ €์žฅํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ์ƒํƒœ์—์„œ Sorting ํ•˜๋Š” ๊ฒƒ
์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ํฌ๊ธฐ๊ฐ€ 1GB๊ณ  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ 100GB๋ฉด ์ฃผ๊ธฐ์–ต์žฅ์น˜์— โŒ
์–ด๋–ค Internal ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋„ ์ง์ ‘ ์ •๋ ฌํ•  ์ˆ˜๋Š” ์—†์–ด ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜(HDD,SDD)๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์ž…๋ ฅ์„ ๋ถ„ํ• ํ•ด ์ฃผ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‚ด๋ถ€ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐ˜๋ณตํ•˜์—ฌ, ์ ์ง„์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

Internal Sorting

1. Insertion sort

  • Sorting๋œ ๋ฆฌ์ŠคํŠธ๋กœ ์‹œ์ž‘
  • ์ธ์„œํŠธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ ํ›„ ์•Œ๋งž์€ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ๊ทธ ์œ„์น˜์— ์ธ์„œํŠธ

๐Ÿš€ Performance : O(n^2)

  • n = ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๋ชฉ๋ก์— ๋„ฃ์–ด์•ผ ํ•  ์ƒˆ๋กœ์šด ํ‚ค์˜ ์ˆ˜
  • ํ˜„์žฌ ์ •๋ ฌ๋œ ๋ชฉ๋ก์—์„œ ์ƒˆ ํ‚ค์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ๊ฐ„
  • ์ƒˆ ํ‚ค๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ •๋ ฌ๋œ ๋ชฉ๋ก์—์„œ ๋” ํฐ ํ‚ค๋ฅผ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„

โœ… ์ตœ์„ ์€ O(n) : ๋ชจ๋‘ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ

โœ… ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” O(n^2) : ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ
(n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2

โœ”๏ธ ์งง์€ ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ข‹์Œ
โœ”๏ธ ์ด๋ฏธ ๋Œ€๋ถ€๋ถ„ sort๋˜์–ด ์žˆ์œผ๋ฉด ์ข‹์Œ
= ์ตœ์„ ์˜ ๊ฒฝ์šฐ
ํ•œ๋ฒˆ์”ฉ ๋ฐ–์— ๋น„๊ต๋ฅผ ์•ˆํ•˜๋ฏ€๋กœ O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด์— ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ฝ์ž…/์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”, ํ˜„์‹ค์ ์œผ๋กœ ์ตœ๊ณ ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋˜๋Š”๋ฐ, ํƒ์ƒ‰์„ ์ œ์™ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งค์šฐ ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2. Selection sort

  • ํ•ด๋‹น ์ˆœ์„œ์— ์›์†Œ๋ฅผ ๋„ฃ์„ ์œ„์น˜๋Š” ์ •ํ•ด์ ธ ์žˆ๊ณ  ์–ด๋–ค ์›์†Œ๋ฅผ ๋„ฃ์„์ง€ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Insertion sort๋ž‘ ์ข€ ๋‹ค๋ฅธ๋ฐ Selection์€ ๋ฐฐ์—ด์—์„œ ํ•ด๋‹น ์ž๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ ์ž๋ฆฌ์— ์˜ค๋Š” ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.

๐Ÿš€ Performance : O(n^2)

๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ,

  • ์ฒซ ๋ฒˆ์งธ ํšŒ์ „์—์„œ์˜ ๋น„๊ตํšŸ์ˆ˜ : 1 ~ (n-1) => n-1
    ๋‘ ๋ฒˆ์งธ ํšŒ์ „์—์„œ์˜ ๋น„๊ตํšŸ์ˆ˜ : 2 ~ (n-1) => n-2
    ...
    โ–ถ๏ธ (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2

n๊ฐœ์˜ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋Š”๋ฐ O(n^2) ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
์ตœ์„ , ํ‰๊ท , ์ตœ์•…์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2) ์œผ๋กœ ๋™์ผํ•˜๋‹ค.

โœ”๏ธ ์žฅ์ 

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹จ์ˆœํ•˜๋‹ค.
  • ์ •๋ ฌ์„ ์œ„ํ•œ ๋น„๊ต ํšŸ์ˆ˜๋Š” ๋งŽ์ง€๋งŒ, Bubble Sort์— ๋น„ํ•ด ์‹ค์ œ๋กœ ๊ตํ™˜ํ•˜๋Š” ํšŸ์ˆ˜๋Š” ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ตํ™˜์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š” ์ž๋ฃŒ์ƒํƒœ์—์„œ ๋น„๊ต์  ํšจ์œจ์ ์ด๋‹ค.
  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค. => ์ œ์ž๋ฆฌ ์ •๋ ฌ(in-place sorting)

โœ”๏ธ ๋‹จ์ 

  • ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n^2)์œผ๋กœ, ๋น„ํšจ์œจ์ ์ด๋‹ค.
  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ(Unstable Sort) ์ด๋‹ค. = ์ค‘๋ณต๋œ ๊ฐ’์ด ์ž…๋ ฅ ์ˆœ์„œ์™€ ๋™์ผํ•˜๊ฒŒ ์ €์žฅ์ด ๋˜์ง€ ์•Š๋Š” ์ •๋ ฌ

3. Bubble sort

  • ์„œ๋กœ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ์ž๋ฆฌ๋ฅผ ๊ตํ™˜ํ•ด์„œ ์ •๋ ฌ

๐Ÿš€ Performance : O(n^2)

(n-1) + (n-2) + (n-3) + .... + 2 + 1 => n(n-1)/2์ด๋ฏ€๋กœ, O(n^2) ์ด๋‹ค.
๋˜ํ•œ, Bubble Sort๋Š” ์ •๋ ฌ์ด ๋ผ์žˆ๋˜ ์•ˆ๋ผ์žˆ๋˜, 2๊ฐœ์˜ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์„ , ํ‰๊ท , ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n^2) ์œผ๋กœ ๋™์ผํ•˜๋‹ค.

โœ”๏ธ ์žฅ์ 

  • ๊ตฌํ˜„์ด ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.
  • Selection sort์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ in-place sorting์ž„
  • stable sort์ด๋‹ค

โœ”๏ธ ๋‹จ์ 

  • ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n^2)์œผ๋กœ, ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๋‹ค.
  • ๊ตํ™˜์ด ๋„ˆ๋ฌด ๋งŽ์ด ์ผ์–ด๋‚œ๋‹ค.

4. Merge sort

  • Divide and Conquer๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•จ
    = ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹
  • ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋จธ์ง€ํ•จ
  • ์–˜๋„ Stable sort์ž„!

    ์ด๋ฏธ ํ•ฉ๋ณ‘์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋‘ ์˜์—ญ์ด ๊ฐ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๋‘ ๋ฐฐ์—ด์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ์ •๋ ฌํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๐Ÿš€ Performance : O(nlogโ‚‚n)

  • ์ˆœ์ฐจ์ ์ธ ๋น„๊ต๋กœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์˜ ์ •๋ ฌ์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•จ.

5. Quick sort

  • Divide and Conquer๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•จ
  • JAVA์—์„œ Arrays.sort()์— ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜!

โœ… Quick sort vs Merge sort

  • Quick sort : ์šฐ์„  ํ”ผ๋ฒ—์„ ํ†ตํ•ด ์ •๋ ฌ (partition) => ์˜์—ญ์„ ์ชผ๊ฐฌ (quick sort)

    • ์ž„์˜ ์ ‘๊ทผ
    • ๋ฐฐ์—ด์„ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์—ด
  • Merge sort : ์˜์—ญ์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š” ๋งŒํผ ์ชผ๊ฐฌ (merge sort) => ์ •๋ ฌ (merge)

    • ์ˆœ์ฐจ ์ ‘๊ทผ
    • ๋ฐฐ์—ด์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์—ด

โœ… ํ”„๋กœ์„ธ์Šค

  1. ๋ฐฐ์—ด ๊ฐ€์šด๋ฐ์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ๊ณ ๋ฅธ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณ ๋ฅธ ์›์†Œ๋ฅผ ํ”ผ๋ฒ—(pivot) ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ํ”ผ๋ฒ—์€ ๊ฐ€์žฅ ์ฒ˜์Œ ์›์†Œ, ๋งˆ์ง€๋ง‰ ์›์†Œ, ์ค‘๊ฐ„์— ์žˆ๋Š” ์›์†Œ์ค‘์— ๊ณ ๋ฆ„
  1. ํ”ผ๋ฒ— ์•ž์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ๊ฐ’์ด ์ž‘์€ ๋ชจ๋“  ์›์†Œ๋“ค์ด ์˜ค๊ณ , ํ”ผ๋ฒ— ๋’ค์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ๊ฐ’์ด ํฐ ๋ชจ๋“  ์›์†Œ๋“ค์ด ์˜ค๋„๋ก ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ๋ถ„ํ• (Divide) ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ถ„ํ• ์„ ๋งˆ์นœ ๋’ค์— ํ”ผ๋ฒ—์€ ๋” ์ด์ƒ ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.

  2. ๋ถ„ํ• ๋œ ๋‘ ๊ฐœ์˜ ์ž‘์€ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์žฌ๊ท€(Recursion)์ ์œผ๋กœ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

  • ์žฌ๊ท€ ํ˜ธ์ถœ์ด ํ•œ๋ฒˆ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ์ตœ์ข…์ ์œผ๋กœ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ˜๋“œ์‹œ ๋๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ์ฝ”๋“œ

  • ์ž…๋ ฅ ๋ฐฐ์—ด์„ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด (ํ”ผ๋ฒ—์„ ์ค‘์‹ฌ์œผ๋กœ ์™ผ์ชฝ : ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ์š”์†Œ๋“ค, ์˜ค๋ฅธ์ชฝ : ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ์š”์†Œ๋“ค) ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.
public int partition(int[] array, int left, int right) {
    /**
    // ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๊ฐœ์„  ๋ฐฉ๋ฒ•
    //์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด์ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด์žˆ์œผ๋ฉด O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. 
    //์ด๋•Œ, ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ’๊ณผ ์ค‘๊ฐ„๊ฐ’์„ ๊ตํ™˜ํ•ด์ค€๋‹ค๋ฉด ํ™•๋ฅ ์ ์œผ๋กœ๋‚˜๋งˆ ์‹œ๊ฐ„๋ณต์žก๋„ O(nlogโ‚‚n)์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. 
    //ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ํ•œ๋‹คํ•ด๋„ Quick Sort์˜ ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(nlogโ‚‚n)๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
    
    int mid = (left + right) / 2;
    swap(array, left, mid);
    */
    
    int pivot = array[left]; // ๊ฐ€์žฅ ์™ผ์ชฝ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ค์ •
    int i = left, j = right;
    
    while(i < j) {
        while(pivot < array[j]) {
            j--;
        }
        while(i < j && pivot >= array[i]){
            i++;
        }
        swap(array, i, j);
    }
    array[left] = array[i];
    array[i] = pivot;
    
    return i;
}
  • ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค.
public void quickSort(int[] array, int left, int right) {
    if(left >= right) return;
    
    // ๋ถ„ํ•  
    int pivot = partition(); 
    
    // ํ”ผ๋ฒ—์€ ์ œ์™ธํ•œ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ๋Œ€์ƒ์œผ๋กœ ์ˆœํ™˜ ํ˜ธ์ถœ
    quickSort(array, left, pivot-1);  // ์ •๋ณต(Conquer)
    quickSort(array, pivot+1, right); // ์ •๋ณต(Conquer)
}

๐Ÿš€ Performance : ฮ˜(nlogโ‚‚n)

๐Ÿ“Œ ์ตœ์„ ์˜ ๊ฒฝ์šฐ

  • ๋น„๊ต ํšŸ์ˆ˜ : logโ‚‚n
    ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜ n์ด 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด๋ผ๊ณ  ๊ฐ€์ •(n=2^k) ํ–ˆ์„ ๋•Œ, n=2^3์˜ ๊ฒฝ์šฐ, 2^3 -> 2^2 -> 2^1 -> 2^0 ์ˆœ์œผ๋กœ ์ค„์–ด๋“ค์–ด ์ˆœํ™˜ ํ˜ธ์ถœ์˜ ๊นŠ์ด๊ฐ€ 3์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒƒ์„ ์ผ๋ฐ˜ํ™”ํ•˜๋ฉด n=2^k์˜ ๊ฒฝ์šฐ, k(k=logโ‚‚n) ์ž„ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ ๋‹จ๊ณ„์˜ ๋น„๊ต ์—ฐ์‚ฐ : n
    ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ์—์„œ๋Š” ์ „์ฒด ๋ฆฌ์ŠคํŠธ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ‰๊ท  n๋ฒˆ ์ •๋„์˜ ๋น„๊ต๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

๋”ฐ๋ผ์„œ, ์ตœ์„ ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ˆœํ™˜ ํ˜ธ์ถœ์˜ ๊นŠ์ด * ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ ๋‹จ๊ณ„์˜ ๋น„๊ต ์—ฐ์‚ฐ = nlogโ‚‚n ๊ฐ€ ๋œ๋‹ค. ์ด๋™ ํšŸ์ˆ˜๋Š” ๋น„๊ต ํšŸ์ˆ˜๋ณด๋‹ค ์ ์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ : ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด์ด ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ

  • ๋น„๊ต ํšŸ์ˆ˜ : n

๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜ n์ด 2์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด๋ผ๊ณ  ๊ฐ€์ •(n=2^k)ํ–ˆ์„ ๋•Œ, ์ˆœํ™˜ ํ˜ธ์ถœ์˜ ๊นŠ์ด๋Š” n ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ ๋‹จ๊ณ„์˜ ๋น„๊ต ์—ฐ์‚ฐ : n
    ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ์—์„œ๋Š” ์ „์ฒด ๋ฆฌ์ŠคํŠธ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ‰๊ท  n๋ฒˆ ์ •๋„์˜ ๋น„๊ต๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

๋”ฐ๋ผ์„œ, ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ˆœํ™˜ ํ˜ธ์ถœ์˜ ๊นŠ์ด * ๊ฐ ์ˆœํ™˜ ํ˜ธ์ถœ ๋‹จ๊ณ„์˜ ๋น„๊ต ์—ฐ์‚ฐ = n^2 ๋‹ค. ์ด๋™ ํšŸ์ˆ˜๋Š” ๋น„๊ต ํšŸ์ˆ˜๋ณด๋‹ค ์ ์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ํ‰๊ท ์˜ ๊ฒฝ์šฐ : T(n) = O(nlogโ‚‚n)

โœ”๏ธ ์žฅ์ 

  • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ์ด๋™์„ ์ค„์ด๊ณ  ๋จผ ๊ฑฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•œ ๋ฒˆ ๊ฒฐ์ •๋œ ํ”ผ๋ฒ—๋“ค์ด ์ถ”ํ›„ ์—ฐ์‚ฐ์—์„œ ์ œ์™ธ๋˜๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(nlogโ‚‚n)๋ฅผ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ๋„ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.
  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โœ”๏ธ ๋‹จ์ 

  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ(Unstable Sort) ์ด๋‹ค.
  • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋Š” Quick Sort์˜ ๋ถˆ๊ท ํ˜• ๋ถ„ํ• ์— ์˜ํ•ด ์˜คํžˆ๋ ค ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.

์ฐธ์กฐ : https://gyoogle.dev/blog/algorithm/Quick%20Sort.html

profile
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€