๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์‚ฝ์ž… ์ •๋ ฌ (Insertion Sort)

iseunghan 2021. 11. 22. 13:26
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š

 

'๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก

๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

iseunghan.tistory.com

 

 

์‚ฝ์ž… ์ •๋ ฌ (Insertion Sort)

์‚ฝ์ž… ์ •๋ ฌ์€ 2 ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ, ํ•ด๋‹น ์›์†Œ๋ถ€ํ„ฐ 1 ๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€ ๋น„๊ต๋ฅผ ํ•˜๋ฉฐ ์‚ฝ์ž…ํ•ด ๋‚˜๊ฐ€๋Š” ์ •๋ ฌ์ž…๋‹ˆ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N^2)
๊ณต๊ฐ„ ๋ณต์žก๋„ : O(N)
์•ˆ์ • ์ •๋ ฌ

 

๊ณผ์ •

GIF๋กœ ์ดํ•ดํ•˜๋Š” ์‚ฝ์ž…์ •๋ ฌ

 

๋‚ด๊ฐ€ ๊ทธ๋ฆฐ ์‚ฝ์ž…์ •๋ ฌ

  1. 2 ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. 1๋ฒˆ ๊ณผ์ •์—์„œ i ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด, i ๋ฒˆ์งธ๋ถ€ํ„ฐ 1 ๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€ ๋น„๊ต๋ฅผ ํ•˜๋ฉฐ ์‚ฝ์ž…ํ•ด ๋‚˜์•„๊ฐ€๋Š” ์ •๋ ฌ์ž…๋‹ˆ๋‹ค.
  3. ์•ž์—์„œ ์ด๋ฏธ ์ •๋ ฌ์„ ์™„๋ฃŒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์—์„œ ์•ž ์›์†Œ๊ฐ€ ๋” ์ด์ƒ ํฌ์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. (์•„๋ž˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…)

 

Code

  • 1๋ฒˆ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
for(int i=1; i<arr.length; i++)

 

  • 2๋ฒˆ ๊ณผ์ •์„ ์ฝ”๋“œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
int temp;
int prev = i-1;
while(prev >= 0 && arr[prev] > arr[prev+1]) {
	// ์•ž ์›์†Œ๊ฐ€ ๋” ํฌ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
    temp = arr[prev+1];
    arr[prev+1] = arr[prev];
    arr[prev] = temp;
}

 

์œ„ ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

int temp = arr[i];
int prev = i-1;

while(prev >= 0 && arr[prev] > temp) {
    arr[prev+1] = arr[prev];
    prev--;
}
arr[prev+1] = temp;

 

  • 3๋ฒˆ ๊ณผ์ •์€ ์œ„ 2๋ฒˆ ๊ณผ์ •์˜ while๋ฌธ ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

4 ๋ฒˆ์งธ ์ˆซ์ž์ธ 11์„ ์ •๋ ฌํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ, ์ด๋ฏธ ์•ž์—์„œ ์ •๋ ฌ์„ ํ•œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋งจ ์•ž๊นŒ์ง€ ์›์†Œ๋ฅผ ๋น„๊ตํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

์ „์ฒด ์ฝ”๋“œ

public void insertion_sort(int[] arr) {
    int temp = 0, prev = 0;
    // 1๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์ˆœํšŒ
    for(int i=1; i<arr.length; i++) {
    	temp = arr[i];
        prev = i - 1;
        // ์ฒซ ๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€ ๋น„๊ตํ•˜๋ฉด์„œ ์‚ฝ์ž…ํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
        while(prev >= 0 && arr[prev] > temp) {
            arr[prev + 1] = arr[prev];
            prev--;
        }
        arr[prev + 1] = temp;	// ํ˜„์žฌ prev + 1 ์œ„์น˜์— temp๊ฐ’์— ๋„ฃ์—ˆ๋˜ arr[i]๊ฐ’์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
    }
}
๋ฐ˜์‘ํ˜•