๋ฐ์ํ
์๋ ํ์ธ์, ์๊ณ ๋ฆฌ์ฆ์ ์ ๋ฆฌํ๋ ํฌ์คํ ์ ๋๋ค. ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ๊ณ ํ์๋ ค๋ฉด ํด๋น ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ด์ฉํด์ฃผ์ธ์. ๐
์ฝ์ ์ ๋ ฌ (Insertion Sort)
์ฝ์ ์ ๋ ฌ์ 2 ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ์์ฐจ์ ์ผ๋ก, ํด๋น ์์๋ถํฐ 1 ๋ฒ์งธ ์์๊น์ง ๋น๊ต๋ฅผ ํ๋ฉฐ ์ฝ์ ํด ๋๊ฐ๋ ์ ๋ ฌ์ ๋๋ค.
์๊ฐ ๋ณต์ก๋ : O(N^2)
๊ณต๊ฐ ๋ณต์ก๋ : O(N)
์์ ์ ๋ ฌ
๊ณผ์
- 2 ๋ฒ์งธ ์์๋ถํฐ ์์ํ์ฌ ๋ง์ง๋ง ์์๊น์ง ์์ฐจ์ ์ผ๋ก ์ ๋ ฌ์ ์งํํฉ๋๋ค.
- 1๋ฒ ๊ณผ์ ์์ i ๋ฒ์งธ ์์๋ถํฐ ์์ํ๋ค๋ฉด, i ๋ฒ์งธ๋ถํฐ 1 ๋ฒ์งธ ์์๊น์ง ๋น๊ต๋ฅผ ํ๋ฉฐ ์ฝ์ ํด ๋์๊ฐ๋ ์ ๋ ฌ์ ๋๋ค.
- ์์์ ์ด๋ฏธ ์ ๋ ฌ์ ์๋ฃํ๊ธฐ ๋๋ฌธ์ ๋น๊ตํ๋ ๊ณผ์ ์์ ์ ์์๊ฐ ๋ ์ด์ ํฌ์ง ์๋ค๋ฉด ์ข ๋ฃํด๋ ๋ฉ๋๋ค. (์๋์์ ์์ธํ ์ค๋ช )
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]๊ฐ์ ๋ฃ์ด์ค๋๋ค.
}
}
๋ฐ์ํ