# μ½μ μ λ ¬ (Insertion Sort)
written by sohyeon, hyemin π‘
# 1. μ½μ μ λ ¬μ΄λ?
μ νν μμλ₯Ό μλ§μ μμΉμ μ½μ
νλ μμ
μ λ°λ³΅νμ¬ μ λ ¬νλ μκ³ λ¦¬μ¦μ΄λ€.
μλ£ λ°°μ΄μ λͺ¨λ μμλ₯Ό μμμλΆν° μ°¨λ‘λλ‘ μ ννκ³
μ΄λ―Έ μ λ ¬λ λ°°μ΄ λΆλΆκ³Ό λΉκ΅ ν μλ§μ μμΉλ₯Ό μ°Ύμ μ½μ
ν¨μΌλ‘μ¨ μ λ ¬μ μμ±νλ μκ³ λ¦¬μ¦μ΄λ€.
# 2. λμλ°©μ
keyκ°μ μ λ ¬λ λ°°μ΄ λΆλΆκ³Ό λΉκ΅νμ¬ μλ§μ μμΉμ μ½μ
μ½μ
μ , x
λ μ λ ¬λμ§ μμ λΆλΆμ 첫λ²μ§Έ μμλ‘ μ νλ ν€ κ°μ΄λ€.
μ½μ
ν, μ½μ
λ λΆλΆμμ x
κ° λ€μ΄κ° μλ§μ μμΉμ μ½μ
νκ² λλ€.
μ λ ¬λμ§ μμ νλͺ© μ€ μ²«λ²μ§Έ νλͺ©μ΄ λ€μ keyκ°μΌλ‘ μ§μ λλ€.
# 3. νΉμ§
# 1) μ₯μ
- κ°λ¨ν ꡬν
- κ°μ κ° μ¬μ΄μλ μλμ μμΉ λ³νκ° μμ
- Stableν μ λ ¬μ
- μ£Όμ΄μ§ μλ£κ³΅κ° μ΄μΈμ 곡κ°μ μ¬μ©νμ§ μμ
# 2) λ¨μ
- μ λ ₯λ°μ΄ν° λ°°μ΄μ κΈΈμ΄κ° κΈΈμ΄μ§μλ‘ λΉν¨μ¨μ
- μμΌλ‘ μ λ ¬λμ΄ μλ μ λ ₯ κ°μ λν΄μ μ΅μ μ μ±λ₯μ 보μ (λͺ¨λ μ λ ₯ κ°μ λν΄ μ½μ μ΄ νμ)
# 4. μκ°λ³΅μ‘λ
T(n) = c1n+c2(nβ1)+c4(nβ1)+c5(n(n+1)/2β1)+c6(n(nβ1)/2)+c7(n(nβ1)/2)+c8(nβ1)
β΄T(n)= O(n^2)
# 5. μμ μ½λ
import java.util.Scanner;
// λ¨μ μ½μ
μ λ ¬
class InsertionSort {
// λ¨μ μ½μ
μ λ ¬
static void insertionSort(int[] a, int n) {
for (int i = 1; i < n; i++) {
int j;
int tmp = a[i];
for (j = i; j > 0 && a[j - 1] > tmp; j--)
a[j] = a[j - 1];
a[j] = tmp;
}
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("λ¨μ μ½μ
μ λ ¬");
System.out.print("μμμοΌ");
int nx = stdIn.nextInt();
int[] x = new int[nx];
for (int i = 0; i < nx; i++) {
System.out.print("x[" + i + "]οΌ");
x[i] = stdIn.nextInt();
}
insertionSort(x, nx); // λ°°μ΄ xλ₯Ό λ¨μ μ½μ
μ λ ¬
System.out.println("μ€λ¦μ°¨μμΌλ‘ μ λ ¬νμ΅λλ€.");
for (int i = 0; i < nx; i++)
System.out.println("x[" + i + "]οΌ" + x[i]);
}
}
β ν μ λ ¬ (Heap Sort) μ νκ²μ β