# ์„ ํƒ ์ •๋ ฌ (Selection Sort)

written by sohyeon, hyemin ๐Ÿ’ก


# 1. ์„ ํƒ ์ •๋ ฌ์ด๋ž€?

์„ ํƒ ์ •๋ ฌ์€ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ถ€ํ„ฐ ์„ ํƒํ•ด ์•Œ๋งž์€ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ์„œ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.


# 2. ๋™์ž‘ ๋ฐฉ์‹

1. ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์˜ ์š”์†Œ์ธ 1์„ ์„ ํƒํ•ด ์ •๋ ฌ์„ ์‹œ์ž‘ํ•˜๊ณ , 6๊ณผ ๊ตํ™˜ํ•œ๋‹ค.
2. ์•„์ง ์ •๋ ฌํ•˜์ง€ ์•Š์€ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ์ธ 3์„ ์„ ํƒํ•ด ์ •๋ ฌ์„ ์‹œ์ž‘ํ•˜๊ณ , ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์ธ 4์™€ 3์„ ๊ตํ™˜ํ•œ๋‹ค.
3~7. ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

# 3. ํŠน์ง•

# 1) ์žฅ์ 

  • ์ž๋ฃŒ ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ๋‹ค.

# 2) ๋‹จ์ 

  • ์„ ํƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•ˆ์ •์ ์ด์ง€ ์•Š๋‹ค.
    • ์ฆ‰, ์š”์†Ÿ๊ฐ’์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ ์ƒ๋Œ€์ ์ธ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

# 4. ์‹œ๊ฐ„๋ณต์žก๋„

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

    • ๋‘ ๊ฐœ์˜ for ๋ฃจํ”„์˜ ์‹คํ–‰ ํšŸ์ˆ˜
    • ์™ธ๋ถ€ ๋ฃจํ”„ : (n-1)๋ฒˆ
    • ๋‚ด๋ถ€ ๋ฃจํ”„(์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ) : 0์—์„œ n-2๊นŒ์ง€ ๋ณ€ํ•˜๋Š” i์— ๋Œ€ํ•˜์—ฌ (n-1)-i๋ฒˆ (n-1, n-2, ... , 2, 1๋ฒˆ)
  • ๊ตํ™˜ ํšŸ์ˆ˜

    • ์™ธ๋ถ€ ๋ฃจํ”„์˜ ์‹คํ–‰ ํšŸ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค.
    • ํ•œ ๋ฒˆ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ 3๋ฒˆ์˜ ์ด๋™์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ „์ฒด ์ด๋™ ํšŸ์ˆ˜๋Š” 3(n-1)๋ฒˆ
T(n) = (n-1) + (n-2) + ... + 1 = n(n-1)/2 = O(n^2)

# 5. ์„ ํƒ ์ •๋ ฌ Java ์ฝ”๋“œ

# ์„ ํƒ ์ •๋ ฌ(SelectionSort)์˜ ๊ตํ™˜ ๊ณผ์ •

1. ์•„์ง ์ •๋ ฌํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ์ž‘์€ ํ‚ค์˜ ๊ฐ’(a[min])์„ ์„ ํƒํ•œ๋‹ค.  
2. a[min]๊ณผ ์•„์ง ์ •๋ ฌํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.

# ex) ์˜ˆ์ œ

// ๋‹จ์ˆœ ์„ ํƒ ์ •๋ ฌ
static void selectionSort(int[] a, int n) {
    for (int i = 0; i < n - 1; i++) {
        int min = i;           // ์•„์ง ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
        for (int j = i + 1; j < n; j++)
            if(a[j] < a[min])
            min = j;
        if(i != min)
            swap(a, i, min);   // ์•„์ง ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ์ฒซ ์š”์†Œ์™€ ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. 
    }
}

๋‹จ์ˆœ ์„ ํƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์š”์†Ÿ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ํšŸ์ˆ˜๋Š” (n^2-n)/2ํšŒ์ด๋‹ค.

์ตœ์†Ÿ๊ฐ’์ด ์ž๊ธฐ ์ž์‹ ์ด๋ฉด ์ž๋ฃŒ ์ด๋™์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๊ต ์—ฐ์‚ฐ 1๊ฐœ๊ฐ€ ์ด๋™ ์—ฐ์‚ฐ 3๊ฐœ๋ณด๋‹ค ์‹œ๊ฐ„์ด ์ ๊ฒŒ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํšจ๊ณผ์ ์ด๋‹ค.

# Reference & Additional Resources

  • Do it! ์ž๋ฃŒ๊ตฌ์กฐ์™€ ํ•จ๊ป˜ ๋ฐฐ์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋ฌธ ์ž๋ฐ”ํŽธ

  • C์–ธ์–ด๋กœ ์‰ฝ๊ฒŒ ํ’€์–ด์“ด ์ž๋ฃŒ ๊ตฌ์กฐ

Last Updated: 12/5/2020, 11:36:44 AM