[์ •๋ ฌ] Insertion Sort

์‚ฝ์ž… ์ •๋ ฌ์˜ ๊ฐœ๋…

์‚ฝ์ž… ์ •๋ ฌ ์ˆ˜ํ–‰๋„

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

  1. ์„ ํƒ ์ •๋ ฌ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ๋Š” ์ •๋ ฌ์ด๋‹ค.
  2. ํ˜„์žฌ Key ์•ž์— ์œ„์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋“ค์ด๋ฉฐ, ์ •๋ ฌ์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋“ค ์‚ฌ์ด์— Key์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์‚ฝ์ž…์ •๋ ฌ์ด๋‹ค.
  3. ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์ผ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„๊ต๋ฅผ ๋‹จ ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์„ ์˜ ๊ฒฝ์šฐ O(N)์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

 

๋™์ž‘ ๋ฐฉ์‹

  1. ๋ฆฌ์ŠคํŠธ ๊ธธ์ด(n)์˜ -1 ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค. (๋งจ ์•ž์˜ ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธํ•œ๋‹ค.)

         1-2. ํ•ด๋‹น ์œ„์น˜์— ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

         1-1. ํ˜„์žฌ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ์™€ ์•ž์— ์œ„์น˜ํ•œ ์ •๋ ฌ๋œ ๊ฐ’๋“ค์„ ๋น„๊ตํ•˜๋ฉฐ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.

    void sort(int[] numbers) {
				// 1.
        for(int i=1; i<numbers.length; i++) {
            int temp = numbers[i], j;
						// 1-1.
            for(j = i-1; j>=0 && numbers[j] > temp; j--) {
                numbers[j+1] = numbers[j];
            }
						// 1-2.
            numbers[j+1] = temp;
        }
    }

์‚ฝ์ž… ์ •๋ ฌ์˜ ์žฅ๋‹จ์ 

์žฅ์  

  1. stable sort ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ •๋ ฌ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•œ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  3. ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.
  4. ๋ฐฐ์—ด ์•ˆ์—์„œ ๋ชจ๋“  ๊ณผ์ •์ด ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์—†๋‹ค.  -> ๊ณต๊ฐ„ ๋ณต์žก๋„ O(1) 

 

๋‹จ์ 

  1. key๊ฐ€ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ž์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์ด ํ•œ์นธ์”ฉ ์ด๋™์„ ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
  2. ๋น„๊ต์  ๋งŽ์€ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ด๋™์„ ํฌํ•จํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
  3. ํ‰๊ท , ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2)์ธ ๋น„ํšจ์œจ์ ์ธ ์ •๋ ฌ์ด๋‹ค.

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

best case

1.๋ฆฌ์ŠคํŠธ ๊ธธ์ด(n)์˜ -1 ๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค. (์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ์ œ์™ธํ•œ n-1๊ฐœ)

        1-1. 1๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ n๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.

               1, 2, ....... n-1

        1-2. ํ•ด๋‹น ์œ„์น˜์— ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. 

               1 + 2 + 3 + ...... + n-1 = n(n-1)/2 → O(N^2)

 

worst case

  1. ๋ชจ๋‘ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ๋ฒˆ์”ฉ ๋ฐ–์— ๋น„๊ต๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.                                  1 + 1 + 1 + ..... + 1 = n → O(N)

Insertion Sort vs Selection Sort

  1. Selection Sort ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
  2. ๋ฐ˜๋ฉด์— Insertion Sort๋Š” ํ•„์š”ํ•œ ๋งŒํผ์˜ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
  3. ์ •๋ฆฌํ•˜์ž๋ฉด ์‚ฝ์ž… ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๊ณ , ์„ ํƒ ์ •๋ ฌ์€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ •๋ ฌ๋“ค์˜ ๋น„๊ต

https://ybdeveloper.tistory.com/117

 

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต Reference https://d2.naver.com/helloworld/0315536

ybdeveloper.tistory.com