์ฝ์ ์ ๋ ฌ (Injection Sort)
์ฝ์ ์ ๋ ฌ์, ํ ๋ฐฐ์ด์ '์ ๋ฐฐ์ด'๊ณผ '๋ท ๋ฐฐ์ด'๋ก ์ชผ๊ฐ์ด '๋ท ๋ฐฐ์ด'์ ์์๋ฅผ ์ ๋ ฌ๋ '์ ๋ฐฐ์ด'์ ๋ค์ด๊ฐ ์ฌ๋ฐ๋ฅธ ์์น๋ฅผ ์ฐพ์ ์ฝ์ ํ๋ ์ ๋ ฌ์ด๋ค. ์ ์ดํด๊ฐ ๋์ง ์์ ์ ์์ผ๋ฏ๋ก, ํ๋์ฉ ์ค๋ช ์ ํด๋ณด๊ฒ ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง ๋ฐฐ์ด์ด ์๋ค๊ณ ํ์.
array = [3, 4, 5, 2, 1, 6, 7]
3 | 4 | 5 | 2 | 1 | 6 | 7 |
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ , ์ฃผ์ด์ง ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ๋นจ๊ฐ ๋ถ๋ถ๊ณผ ํ๋ ๋ถ๋ถ์ผ๋ก ๋ณผ ์ ์๋ค.
๋นจ๊ฐ ๋ถ๋ถ์ ์ด๋ฏธ ์ ๋ ฌ์ด ๋ '์ ๋ฐฐ์ด',
ํ๋ ๋ถ๋ถ์ '์ ๋ฐฐ์ด'์ ์ฝ์ ์ด ๋๊ธฐ ์ํด ๋๊ธฐํ๊ณ ์๋ '๋ท ๋ฐฐ์ด'๋ก ์ดํดํ๋ฉด ์ข๋ค.
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ '๋ท ๋ฐฐ์ด'์ ๋ค์ด์๋ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์์ํ๋ฏ๋ก, ์ ์ฒด ๋ฐฐ์ด๋ก ์๊ฐํ๋ฉด ๋ ๋ฒ์งธ ์์๋ถํฐ ์ ๋ ฌ ๋์์ด ๋๋ค.
๋ ๋ฒ์งธ ์์ '4'๋ '์ ๋ฐฐ์ด'์ ์ ์ผ ๋ง์ง๋ง ์์์ธ '3'๋ณด๋ค ํฌ๋ฏ๋ก, ์ด๋ํ์ง ์๊ณ ์๋ฆฌ๊ฐ ๊ฒฐ์ ๋๋ค.
3 | 4 | 5 | 2 | 1 | 6 | 7 |
์ธ ๋ฒ์งธ ์์ '5'๋ '์ ๋ฐฐ์ด'์ ์ ์ผ ๋ง์ง๋ง ์์์ธ '4'๋ณด๋ค ํฌ๋ฏ๋ก, ์ด๋ํ์ง ์๊ณ ์๋ฆฌ๊ฐ ๊ฒฐ์ ๋๋ค.
3 | 4 | 5 | 2 | 1 | 6 | 7 |
๋ค ๋ฒ์งธ ์์๋ฅผ ๋ณด์. '2'๋ '์ ๋ฐฐ์ด'์ ์ ์ผ ๋ง์ง๋ง ์์์ธ '5'๋ณด๋ค ์์ผ๋ฏ๋ก ์์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
'2'๋ ๊ทธ ์์ธ '4'๋ณด๋ค ์์ผ๋ฏ๋ก ์์ผ๋ก ํ ์นธ ๋ ์ด๋ํ๊ณ ,
๊ทธ ์์ธ '3'๋ณด๋ค ์์ผ๋ฏ๋ก ์์ผ๋ก ํ ์นธ ๋ ์ด๋ํ๋ค.
๋ฐ๋ผ์ ์์ ์๋ฌด๊ฒ๋ ์๊ฑฐ๋, ์์ ์์๋ณด๋ค '2'๊ฐ ๋ ํฌ๋ค๋ฉด ์ด๋์ ๋ฉ์ถ๊ณ ์๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๋ค.
3 | 4 | 2 | 5 | 1 | 6 | 7 |
3 | 2 | 4 | 5 | 1 | 6 | 7 |
2 | 3 | 4 | 5 | 1 | 6 | 7 |
2 | 3 | 4 | 5 | 1 | 6 | 7 |
์ด์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด, ์ฝ์ ์ ๋ ฌ์ด ์๋ฃ๋๋ค. ์ฝ๋๋ฅผ ์ดํด๋ณด์.
์ฝ์ ์ ๋ ฌ ํ์ด์ฌ ์ฝ๋
""" | |
์ฝ์ ์ ๋ ฌ (Injection_sort) | |
์ฃผ์ด์ง ๋ฐฐ์ด์ ์ชผ๊ฐ ์ ๋ ฌ๋ '์ ๋ฐฐ์ด'๊ณผ ์ ๋ ฌ๋๊ธธ ๋๊ธฐํ๋ '๋ท ๋ฐฐ์ด'๋ก ๋์ฐ์ด ์๊ฐํ๋ค. | |
๋ ๋ฒ์งธ ์์๋ถํฐ ์์ ์์ฑ๋ ๋ฐฐ์ด์ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋ฃ๋ ์๊ณ ๋ฆฌ์ฆ. | |
""" | |
array = [3, 4, 5, 2, 1, 6, 7] | |
for i in range(1, len(array)): | |
target = array[i] | |
idx = i | |
for j in range(i-1, -1, -1): | |
if array[j] > target: | |
array[j], array[idx] = array[idx], array[j] | |
idx -= 1 | |
print(array) |
์ฝ์ ์ ๋ ฌ ์๋ฐ ์ฝ๋
/* | |
* ์ฝ์ ์ ๋ ฌ (Injection_sort) | |
* ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ชผ๊ฐ ์ ๋ ฌ๋ '์ ๋ฐฐ์ด'๊ณผ ์ ๋ ฌ๋๊ธธ ๋๊ธฐํ๋ '๋ท ๋ฐฐ์ด'๋ก ๋์ฐ์ด ์๊ฐํ๋ค. | |
* ๋ ๋ฒ์งธ ์์๋ถํฐ ์์ ์์ฑ๋ ๋ฐฐ์ด์ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋ฃ๋ ์๊ณ ๋ฆฌ์ฆ. | |
*/ | |
public static void injectionSort(int[] arr){ | |
for (int i = 1; i < arr.length; i++){ | |
int target = arr[i]; | |
int idx = i; | |
for (int j = i-1; j > -1; j--){ | |
if (arr[j] > target){ | |
int temp = arr[j] | |
arr[j] = arr[idx] | |
arr[idx] = temp | |
idx -= 1 | |
} | |
} | |
} | |
} |
์ฝ์ ์ ๋ ฌ ์ฅ๋จ์
- ์ฝ์ ์ ๋ ฌ์ ์ฅ์
Best case์ ๊ฒฝ์ฐ, O(N)์ด๋ผ๋ ์ข์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋น๊ตํ์๋ฅผ ๋ฒ๋ธ์ ๋ ฌ์ ๋นํด ํ์ฐํ ์ค์๋ค.
์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด, ํฌ๊ธฐ๊ฐ ์์ ๋ฐฐ์ด์ ์ ์ฉํ๋ค.
- ์ฝ์ ์ ๋ ฌ์ ๋จ์
Worst case์ ๊ฒฝ์ฐ O(n^2)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ฐ์ดํฐ์ ์ํ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ํธ์ฐจ๊ฐ ์ฌํ๋ค.
'๐งช ์ปดํจํฐ๊ณผํ : CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] Array์ LinkedList์ ์ฐจ์ด (์ธํฐ๋ทฐ ๋๋น) (0) | 2022.10.23 |
---|---|
[๊ฐ๋ฐ๊ณตํต] Call by value์ Call by reference (Java, Python, C/C++) (0) | 2022.10.11 |
[Algorithm] ํ ์ ๋ ฌ (Heap Sort) (0) | 2022.09.03 |
[Algorithm] ์ ํ ์ ๋ ฌ (Selection Sort) (0) | 2022.09.03 |
[Algorithm] ๋ฒ๋ธ ์ ๋ ฌ (Bubble Sort) (0) | 2022.09.03 |