๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
D.evelop [CS]/Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] ์ •๋ ฌ Sort - 2-1. ๋น„๊ต ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์„ ํƒ ์ •๋ ฌ)

by Danne 2024. 4. 18.

๐Ÿ’ก์˜ˆ์‹œ์— ๋Œ€ํ•œ ๊ฐ€์ •
- ์ž…๋ ฅ ํฌ๊ธฐ n
- ์ž…๋ ฅ ๋ฐฐ์—ด A[0…. n-1]
- ์ž…๋ ฅ ๋ฐ์ดํ„ฐ : ์–‘์˜ ์ •์ˆ˜
- ์ •๋ ฌ ๋ฐฉ์‹ : ์˜ค๋ฆ„์ฐจ์ˆœ (1, 2, 3, 4,…)

 

2-1) ์„ ํƒ ์ •๋ ฌ (Selection sort)

  1. ์ž…๋ ฅ ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์„ ํƒํ•ด์„œ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ์‹
  2. ์ •๋ ฌ ๊ณผ์ •

๐Ÿ“๋ฐฐ์—ด A = [60, 90, 30, 10]

(0๋‹จ๊ณ„)
1. ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์Œ = 10
A = [60, 90, 30, 10]

2. ์ด ์ตœ์†Ÿ๊ฐ’๊ณผ ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ[60] ๋น„๊ต

10 ๊ณผ 60 ๋น„๊ต
: 10 ์€ 60๋ณด๋‹ค ์ž‘๋‹ค. (์กฐ๊ฑด ๋งŒ์กฑ)

A = [60, 90, 30, 10]

3. ์กฐ๊ฑด๋งŒ์กฑ ์‹œ, ์œ„์น˜๋ฅผ ๊ตํ™˜ -> ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณต


A = [10, 90, 30, 60]
              ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„์—์„œ ์ •๋ ฌ ์‹œ์ž‘


(1๋‹จ๊ณ„)
์ตœ์†Œ๊ฐ’ 30, ๋ฏธ์ •๋ ฌ ์ฒซ ๋ฒˆ ์งธ ๊ฐ’ 90 ๋น„๊ต

A =
[10, 90, 30, 60]
A = [10,30, 90, 60]



(2๋‹จ๊ณ„)
์ตœ์†Œ๊ฐ’ 60, ๋ฏธ์ •๋ ฌ ์ฒซ ๋ฒˆ ์งธ ๊ฐ’ 90 ๋น„๊ต

A =
[10, 30, 90, 60]
A = [10, 30, 60, 90]


(๊ฒฐ๊ณผ)
A = [10, 30, 60, 90]



๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜ : 4๊ฐœ
์ด ๋น„๊ต ํšŸ์ˆ˜ : 4๋ฒˆ = (n-1) - i =
(4 - 1) - 0 = 3

 

 

3. ํŠน์ง•

  • ์„ฑ๋Šฅ : O(n²)
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š์Œ
    ํ•ญ์ƒ (n-1) - i ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š” (ํ•ญ์ƒ ์ตœ์†Œ๊ฐ’ ์ฐพ์•„์„œ ๋น„๊ต)
    → ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์ œ์ž๋ฆฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ž…๋ ฅ ๋ฐฐ์—ด A์ด์™ธ ์ƒ์ˆ˜๊ฐœ(i, j, min, tmp)์˜ ์ €์žฅ ๊ณต๊ฐ„๋งŒ ํ•„์š”
  • ์•ˆ์ •์ ์ด์ง€ ์•Š์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์œ„์น˜๊ฐ€ ๋ฐ”๋€œ

์•ˆ์ •์ ์ด์ง€ ์•Š์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

 

[JS code]

function selectionSort(A) {
    const n = A.length;
    
    for (let i = 0; i < n - 1; i++) { // (n-1)๋ฒˆ ๋ฐ˜๋ณต
        // ์ตœ์†Ÿ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ i๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
        let min = i; 
        
        for (let j = i + 1; j < n; j++) { 
        // 1. A[i..n-1]์—์„œ ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ
        
        	// ๋งŒ์•ฝ ์ตœ์†Œ๊ฐ’ A[min]์ด A[j]๋ณด๋‹ค ํฌ๋‹ค๋ฉด
            if (A[min] > A[j]) {
            	// min์„ j๋กœ ๊ฐฑ์‹ 
                min = j;
            }
        }
        
        //2. A[i]์™€ A[min]์˜ ์œ„์น˜๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
        
        // A[i]๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
        let temp = A[i];
        
        // 2. A[i]๋ฅผ ์ตœ์†Œ๊ฐ’๊ณผ A[min]์œผ๋กœ ๊ต์ฒด
        A[i] = A[min];
        //์ž„์‹œ๋กœ ์ €์žฅํ•œ ๊ฐ’temp์„ A[min]์— ๋Œ€์ž…
        A[min] = temp;
    }
    
    return A;
}

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€