๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜-์ด๋ก ] ์„ ํƒ ์ •๋ ฌ(Selection Sort)

by Wonit 2019. 11. 23.

์„ ํƒ ์ •๋ ฌ(Selection Sort) ์ด๋ž€?

์„ ํƒ์ •๋ ฌ์€ ๊ฐ€์žฅ ์›๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•˜๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ๋กœ ๋ดค์„๋•Œ ๊ฒฐ์ฝ” ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋กœ ๋ณผ ์ˆ˜ ์—†๋‹ค.(์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ณธ๋‹ค๋ฉด)

 

์›๋ฆฌ๋Š” ๋ฐฐ์—ด ์›์†Œ์—๊ฐ€ ๊ฐ€์žฅ ํฐ/์ž‘์€ ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ๋์œผ๋กœ ๋ณด๋‚ด๋Š” ์ž‘์—…์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์„ ํƒ์ •๋ ฌ์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ •๋ ฌ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋˜ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.


์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ(์˜ค๋ฆ„์ฐจ์ˆœ) : ํฐ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜์‹œํ‚ค๊ณ  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•
์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ) : ์ž‘์€ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜์‹œํ‚ค๊ณ  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•
์ตœ์†Œ ์„ ํƒ ์ •๋ ฌ(์˜ค๋ฆ„์ฐจ์ˆœ) : ์ž‘์€ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์œ„์น˜์‹œํ‚ค๊ณ  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
์ตœ์†Œ ์„ ํƒ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ) : ํฐ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์œ„์น˜์‹œํ‚ค๊ณ  ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ 1์”ฉ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•

์ด์ค‘ ์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ (์˜ค๋ฆ„์ฐจ์ˆœ)์„ ์˜ˆ๋กœ๋“ค์–ด ์„ค๋ช…ํ•œ๋‹ค๋ฉด A[n] ์ด๋ผ๋Š” ๋ฐฐ์—ด์˜ ์ž…๋ ฅ์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด ๋ฐฐ์—ด A์˜ ์›์†Œ 1๋ถ€ํ„ฐ n ๊นŒ์ง€์˜ ์ˆ˜ ์ค‘

๊ฐ€์žฅ ํฐ ์ˆ˜ A[k]๋ฅผ ์žก์•„ ์ œ์ผ ๋A[last]์œผ๋กœ ๋ณด๋‚ด๊ณ  ๋ฐฐ์—ด A์˜ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊นŒ์ง€ ์˜ค๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ฅผ pseudo ์ฝ”๋“œ๋กœ ๋ณด๊ฒŒ๋œ๋‹ค๋ฉด.

selectionSort(a[], n){                     ...1

    for last <- n downto 2{                ... 2
        A[1...last] ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ๊ณ  A[k]๋ผ๊ณ  ํ•œ๋‹ค.        ... 3
        A[k] <-> A[last]; A[k]์™€ A[last]์˜ ๊ฐ’์„ ๊ตํ™˜.    ...4
    }
}
  • 1: ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” A[n]์ด๋‹ค.

  • 2: ์„ ํƒ์ •๋ ฌ์˜ ์ •๋ ฌ ๋ฐฉ์‹(๊ฐ€์žฅ ํฐ/์ž‘์€ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ)์„ ์„ ํƒํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ์ˆ˜ A[last]๋กœ ๊ธฐ์ค€์„ ์„ ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ ๋ฐ˜๋ณต์€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ n ๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ค„์–ด๋“œ๋Š” ๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•œ๋‹ค.

  • 3: A[1...last] ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ A[k]๋ฅผ ์ •ํ•˜๊ณ  ์ •๋ ฌ์„ ํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.

  • 4: ๊ฐ€์žฅ ํฐ ์ˆ˜ A[k]๋ฅผ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋กœ ๋ณด๋‚ด๊ณ  ๋‹ค์‹œ for๋ฌธ์œผ๋กœ ๊ฐ€์„œ n์˜ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.

 
์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ณ  last๊ฐ€ 2 ์ฆ‰ A[2]๊ฐ€ ๋œ๋‹ค๋ฉด A[1]๊ณผ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌ์„ ํ•˜๊ณ  ์„ ํƒ์ •๋ ฌ์„ ๋งˆ์นœ๋‹ค.

 


๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ๊ฒ ์ง€๋งŒ ๋งŒ์•ฝ ์œ„ pseudo ์ฝ”๋“œ์— ์ž…๋ ฅ์œผ๋กœ A[1]์ด ๋“ค์–ด์™”๋‹ค๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

for๋ฃจํ”„๋Š” last๊ฐ€ n์—์„œ ์‹œ์ž‘ํ•ด์„œ 2๊นŒ์ง€ ๋ฐ˜๋ณต์ธ๋ฐ last๊ฐ€ 1์œผ๋กœ 2๋ณด๋‹ค ์ž‘๋‹ค. ์ด ๋•Œ๋Š” for๋ฌธ์„ ํ•œ ๋ฒˆ๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ„๋‹ค.

์ฆ‰ A[1]๋กœ ์ •๋ ฌ์„ ์š”๊ตฌํ•˜๋ฉด ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๊ณ  ๋๋‚˜๊ฒŒ ๋œ๋‹ค.


 

์„ ํƒ ์ •๋ ฌ(Selection Sort)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

 

์œ„์˜ pseudo ์ฝ”๋“œ๋กœ ๋ดค์„ ๋•Œ ์ž…๋ ฅ ๋ฐฐ์—ด A[n]์ด๋ฉด (n์€ ์ž…๋ ฅ์˜ ํฌ๊ธฐ)

 

for ๋ฐ˜๋ณต

    1. A[n] ๋ถ€ํ„ฐ A[2]๊นŒ์ง€ ์ด n-1๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.
    1. A[1...n] ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ด n-1๋ฒˆ์˜ ๋ฐ˜๋ณต์ด ํ•„์š”ํ•˜๋‹ค.

 

๊ตํ™˜

  • ๊ฐ€์žฅ ํฐ ์ˆ˜ A[k]์™€ A[last]๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ƒ์ˆ˜ ์‹œ๊ฐ„์ด ๋“ ๋‹ค.
 
๊ฒฐ๋ก : ∂[n^2]
Best Avg Worst
n^2 n^2 n^2

 

์„ ํƒ์ •๋ ฌ์˜ ํŠน์ง•

 

์žฅ์ 

  • ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ์—์„œ ํšจ๊ณผ์ ์ด๋‹ค.

๋‹จ์ 

  • ๊ฐ™์€ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’ ์ฆ‰ ์ˆ˜๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ ์•ˆ์ •๋œ ์ •๋ ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์•ˆ์ •์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

์„ ํƒ ์ •๋ ฌ(Selection Sort)์˜ ์ž๋ฐ” ์ฝ”๋“œ

๋Œ“๊ธ€