public class InsertionSort {
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
// key๋ณด๋ค ํฐ ์์๋ค์ ๋ค๋ก ์ด๋
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
// ๋ฐฐ์ด ์ถ๋ ฅ์ ์ํ ๋ฉ์๋
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// ํ
์คํธ๋ฅผ ์ํ ๋ฉ์ธ ๋ฉ์๋
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("์ ๋ ฌ ์ ๋ฐฐ์ด:");
printArray(arr);
insertionSort(arr);
System.out.println("์ ๋ ฌ ํ ๋ฐฐ์ด:");
printArray(arr);
}
}
Java
๋ณต์ฌ
์๊ฐ๋ณต์ก๋ ๋ถ์
์ฝ์
์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
โข
์ต์ ์ ๊ฒฝ์ฐ: O(n) - ๋ฐฐ์ด์ด ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ
โข
ํ๊ท ์ ๊ฒฝ์ฐ: O(nยฒ)
โข
์ต์
์ ๊ฒฝ์ฐ: O(nยฒ) - ๋ฐฐ์ด์ด ์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ
์๊ฐ๋ณต์ก๋ O(nยฒ)๊ฐ ๋์ค๋ ๊ณผ์ :
โข
์ธ๋ถ ๋ฃจํ๋ n-1๋ฒ ์คํ (i๋ 1๋ถํฐ n-1๊น์ง)
โข
๋ด๋ถ ๋ฃจํ๋ ์ต์
์ ๊ฒฝ์ฐ i๋ฒ ์คํ
โข
๋ฐ๋ผ์ ์ด ๋น๊ต ํ์๋: 1 + 2 + 3 + ... + (n-1) = n(n-1)/2
๋ฐ๋ผ์ ๋น
์ค ํ๊ธฐ๋ฒ์ผ๋ก O(nยฒ)๊ฐ ๋ฉ๋๋ค.
๊ณต๊ฐ๋ณต์ก๋
์ฝ์
์ ๋ ฌ์ ๊ณต๊ฐ๋ณต์ก๋๋ O(1)์
๋๋ค. ์ฃผ์ด์ง ๋ฐฐ์ด ๋ด์์ ์ ๋ ฌ์ด ์ํ๋๋ฉฐ, ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
ํน์ง
โข
์์ ์ฑ: ์์ ์ ๋ ฌ (๊ฐ์ ๊ฐ์ ๊ฐ์ง ์์๋ค์ ์๋์ ์์น๊ฐ ๋ณด์กด๋จ)
โข
์ ์๋ฆฌ ์ ๋ ฌ: ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๊ฑฐ์ ํ์ํ์ง ์์
โข
์ ์ํ ์ ๋ ฌ: ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ๋ํด ๋งค์ฐ ํจ์จ์
โข
์จ๋ผ์ธ ํน์ฑ: ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ๋ฐ์์ ์ ๋ ฌ ๊ฐ๋ฅ
์ฝ์
์ ๋ ฌ์ ์์ ๋ฐ์ดํฐ์
์ด๋ ๊ฑฐ์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ๋ํด ํจ์จ์ ์ด๋ฉฐ, ์ค์ ๋ก ๋ง์ ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์์ ๋ณด์กฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.