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

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ก ] ์ •๋ ฌ Sort - 2-3. ๋น„๊ต ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์‚ฝ์ž… ์ •๋ ฌ)

by Danne 2024. 4. 24.

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

 

2-3) ์‚ฝ์ž… ์ •๋ ฌ (Insertion sort)

  • ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฝ‘์€ ํ›„,
    ์ด๋ฏธ ๋‚˜์—ด๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ๊ฐ–๋„๋ก ๋ฐ”๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•„ ๋ฝ‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ด์„œ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ์‹
  • ์ •๋ ฌ ๋ถ€๋ถ„ A[0…k-1] ๊ณผ ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„ A[k…n-1] ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌ
  • ์ •๋ ฌ ๊ณผ์ •
    1. ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„ A[k…n-1]์—์„œ 1๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„
    2. ์ •๋ ฌ ๋ถ€๋ถ„ A[0…k-1]์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ž๋ฆฌ์— ์‚ฝ์ž…
์ž…๋ ฅ ๋ฐ์ดํ„ฐ A [10, 30, 40, 20, 70, 50, 60]

 

1๏ธโƒฃ. ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌ๋ถ€๋ถ„๊ณผ ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

2๏ธโƒฃ. ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ 20์„ ๋ฝ‘๋Š”๋‹ค.

3๏ธโƒฃ.  ๋ฝ‘ํžŒ ๋ฐ์ดํ„ฐ 20์„ ์ •๋ ฌ๋ถ€๋ถ„์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ (=์ •๋ ฌ ๋ถ€๋ถ„์˜ ๊ฐ€์žฅ ํฐ ๊ฐ’, 20๊ณผ ๊ฐ€์žฅ ์ธ์ ‘ํ•œ ์ชฝ)๋ถ€ํ„ฐ ๋น„๊ตํ•˜์—ฌ ์ง„์ž…ํ•œ๋‹ค.

 

4๏ธโƒฃ.  ๋น„๊ตํ•  ๋ฐ์ดํ„ฐ๊ฐ€ 20๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ตํ™˜ํ•˜์ง€ ์•Š๊ณ  ๋‹จ๊ณ„๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

 

5๏ธโƒฃ.  2๏ธโƒฃ ~ 4๏ธโƒฃ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

 

 

 

 

 

3. ํŠน์ง•

  • ์„ฑ๋Šฅ : O(n²)
  • ์ œ์ž๋ฆฌ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ์ž…๋ ฅ ๋ฐฐ์—ด A ์ด์™ธ ์ƒ์ˆ˜๊ฐœ(i, j, val) ์˜ ์ €์žฅ ๊ณต๊ฐ„๋งŒ ํ•„์š”
  • ์•ˆ์ •์  ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์›๋ž˜ ์ˆœ์„œ์— ๋ฏผ๊ฐ
    • ์—ญ์ˆœ์˜ ๊ฒฝ์šฐ์—๋Š” O( n²)
    • ์ œ ์ˆœ์„œ๋Œ€๋กœ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์—ˆ์œผ๋ฉด O(n)

 

 

[JS code]

function insertionSort(A) {
    const n = A.length; 

    for (let i = 1; i < n; i++) { // 1, …, (n-1)๊นŒ์ง€ (n-1)๋ฒˆ ๋ฐ˜๋ณต. A[0] ์ •๋ ฌ ๋ถ€๋ถ„์ด๋ฏ€๋กœ ๊ฑด๋„ˆ๋œ€
    
        let val = A[i]; // ๋ฏธ์ •๋ ฌ ๋ถ€๋ถ„ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ. val์— ๋Œ€์ž…
        
        for (let j = i; j > 0 && A[j - 1] > val; j--) { // ์ •๋ ฌ๋œ ๋ถ€๋ถ„์—์„œ ๋น„๊ต๋ฅผ ์‹œ์ž‘ํ•ฉ
        
            A[j] = A[j - 1]; // ์ •๋ ฌ ๋ถ€๋ถ„์˜ A[j-1]์ด val๋ณด๋‹ค ํฌ๋ฉด ๋’ค๋กœ ํ•œ ์นธ ์ด๋™
        }
        
        A[j] = val; // ์ฐพ์•„์ง„ ์œ„์น˜์— ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
    }

    return A;
}

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€