๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ Computer Science/Algorithm

[Algorithm] ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort) ์ด๋ž€? (feat.Swift)

by Fomagran ๐Ÿ’ป 2021. 9. 28.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma๐Ÿ’ป  ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜์€ ํ•™๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…์„ ๋“ฃ๋Š” ์ค‘์— ์‚ฝ์ž… ์ •๋ ฌ์„ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ณผ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ... 

 

๋”ฑ ์ด ๋ฐฉ์‹์ด ์–ด๋–ค ๊ฒƒ์ด๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค! ๋ผ๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ๋– ์˜ค๋ฅด์ง€๊ฐ€ ์•Š๋”๋ผ๊ตฌ์š”... 

 

๊ทธ๋ž˜์„œ ์‚ฝ์ž… ์ •๋ ฌ์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~


์‚ฝ์ž… ์ •๋ ฌ์ด๋ž€?

 

์‚ฝ์ž… ์ •๋ ฌ์€ ์ž๋ฃŒ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ถ€๋ถ„๊ณผ ๋น„๊ตํ•˜์—ฌ, ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์ •๋ ฌ์„ ์™„์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. -์œ„ํ‚ค ๋ฐฑ๊ณผ -

 

์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ

 

์‚ฝ์ž… ์ •๋ ฌ ๊ณผ์ •

 

82,10,9,72,31,45,60๋ฅผ ์‚ฝ์ž… ์ •๋ ฌ์„ ํ•˜๋Š” ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ๋จผ์ € ๋งจ ์ฒซ ๋ฒˆ์งธ์ธ 82์™€ ๊ทธ ๋‹ค์Œ ์ˆซ์ž์ธ 10์„ ๋น„๊ตํ•ด์ค๋‹ˆ๋‹ค. 

 

10์ด ๋” ์ž‘์œผ๋ฏ€๋กœ 82 ์•ž์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. <- 10 82

 

2. 10 ๋‹ค์Œ ์ˆซ์ž์ธ 9์™€ 10 82๋ฅผ ๋น„๊ตํ•ด์ค๋‹ˆ๋‹ค.

 

9๋Š” 10,82๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์•ž์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค <- 9 10 82

 

3. ๊ทธ ๋‹ค์Œ ์ˆซ์ž์ธ 72์™€ ์ด์ „ ์ˆซ์ž๋“ค์„ ๋น„๊ตํ•ด์ค๋‹ˆ๋‹ค.

 

72๋Š” 82๋ณด๋‹ค ์ž‘๊ณ  10๋ณด๋‹ค ํฌ๋ฏ€๋กœ 10 ๋ฐ”๋กœ ๋’ค๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค. <- 9 10 72 82

 

4. 31๊ณผ ์ด์ „ ์ˆซ์ž๋“ค์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

 

31์€ 72๋ณด๋‹ค ์ž‘๊ณ  10๋ณด๋‹ค ํฌ๋ฏ€๋กœ 10 ๋ฐ”๋กœ ๋’ค๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค. <- 9 10 31 72 82

 

5. 45์™€ ์ด์ „ ์ˆซ์ž๋“ค์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

 

45๋Š” 31๋ณด๋‹ค ํฌ๊ณ  72๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ 31 ๋’ค๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค. <- 9 10 31 45 72 82

 

6. ๋งˆ์ง€๋ง‰์œผ๋กœ 60๊ณผ ์ด์ „ ์ˆซ์ž๋“ค์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

 

60์€ 45๋ณด๋‹ค ํฌ๊ณ  72๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ 45 ๋’ค๋กœ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค. <- 9 10 31 45 60 72 82

 

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

 

๋งŒ์•ฝ n๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ 1 + 2 + 3 + 4 ... n-1๊นŒ์ง€ ๋น„๊ต๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n²)์ž…๋‹ˆ๋‹ค.

 

 


์ฝ”๋“œ ๊ตฌํ˜„

 

import Foundation

var numbers = [82,10,9,72,31,45,60]

numbers.sortByInsertion(nil)

extension Array where Element == Int {
    mutating func sortByInsertion(_ startIndex:Int?) -> [Int] {
        let start = startIndex == nil ? 1 : startIndex!
        if start == self.count { return self }
        
        let current = self.remove(at: start)
        var index = 0
        for i in stride(from: start-1, through: 0, by:-1) {
            if current >= self[i] {
                index = i+1
                break
            }
        }
        self.insert(current, at:index)
        return sortByInsertion(start+1)
    }
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€