# λ²λΈ μ λ ¬ (Bubble Sort)
written by sohyeon, hyemin π‘
# 1. λ²λΈ μ λ ¬μ΄λ?
λ²λΈ μ λ ¬μ μ΄μν λ μμμ λμ κ΄κ³λ₯Ό λΉκ΅νμ¬ κ΅νμ λ°λ³΅νλ μ λ ¬μ΄λ€.
# 2. λμ λ°©μ
λμ λ μμλΆν° μμν΄μ κ°μ λΉκ΅νκ³ κ΅νμ΄ νμνλ©΄ κ΅ννλ κ³Όμ μ λ°λ³΅νλ€.
n-1ν λΉκ΅, κ΅νμ νκ³ λλ©΄ κ°μ₯ μμ μμκ° λ§¨ μμΌλ‘ μ΄λνλ€.
μ΄ κ³Όμ μ pass
λΌκ³ νλ€.
pass
κ³Όμ μ΄ n-1ν λ°λ³΅λκ² λλ©°,
κ° pass
μ λΉκ΅,κ΅ν κ³Όμ μ n-1, n-2, n-3, ... , 1 μ΄λ κ² 1νμ© μ€μ΄λ λ€.
λΉκ΅ κ΅ν κ³Όμ μ ν©μ μλμ κ°λ€.
(n-1)+(n-2)+(n-3)+ ... + 1 = n(n-1)/2
# 3. νΉμ§
# 1) μ₯μ
- ꡬνμ΄ λ§€μ° κ°λ¨νλ€.
# 2) λ¨μ
νλμ μμκ° κ°μ₯ μΌμͺ½μμ κ°μ₯ μ€λ₯Έμͺ½μΌλ‘ μ΄λνκΈ° μν΄μλ λ°°μ΄μμ λͺ¨λ λ€λ₯Έ μμλ€κ³Ό κ΅νλμ΄μΌ νλ€.
νΉν νΉμ μμκ° μ΅μ’ μ λ ¬ μμΉμ μ΄λ―Έ μλ κ²½μ°λΌλ κ΅νλλ μΌμ΄ μΌμ΄λλ€.
μΌλ°μ μΌλ‘ μλ£μ κ΅ν μμ (SWAP)μ΄ μλ£μ μ΄λ μμ (MOVE)λ³΄λ€ λ 볡μ‘νκΈ° λλ¬Έμ
λ²λΈ μ λ ¬μ λ¨μμ±μλ λΆκ΅¬νκ³ κ±°μ μ°μ΄μ§ μλλ€.
# 4. μκ°λ³΅μ‘λ
λΉκ΅ νμ
- μ΅μ, νκ· , μ΅μ λͺ¨λ μΌμ : n-1, n-2, β¦ , 2, 1 λ² = n(n-1)/2
κ΅ν νμ
μ λ ₯ μλ£κ° μμμΌλ‘ μ λ ¬λμ΄ μλ μ΅μ μ κ²½μ°,
ν λ² κ΅ννκΈ° μνμ¬ 3λ²μ μ΄λ(SWAP ν¨μμ μμ )μ΄ νμνλ―λ‘-> (λΉκ΅ νμ * 3) λ² = 3n(n-1)/2
μ λ ₯ μλ£κ° μ΄λ―Έ μ λ ¬λμ΄ μλ μ΅μμ κ²½μ°,
μλ£μ μ΄λμ΄ λ°μνμ§ μλλ€.
T(n) = O(n^2)
# 5. μμ
# 1) κΈ°λ³Έμ μΈ λ²λΈ μ λ ¬
import java.util.Scanner;
class BubbleSort {
// a[idx1]μ a[idx2]μ κ°μ λ°κΏλλ€.
static void swap(int[] a, int idx1, int idx2) {
int t = a[idx1];
a[idx1] = a[idx2];
a[idx2] = t;
}
// λ²λΈ μ λ ¬
static void bubbleSort(int[] a, int n) {
for (int i = 0; i < n - 1; i++)
for (int j = n - 1; j > i; j--)
if (a[j - 1] > a[j])
swap(a, j - 1, j);
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("λ²λΈ μ λ ¬(λ²μ 1)");
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();
}
bubbleSort(x, nx); // λ°°μ΄ xλ₯Ό λ²λΈ μ λ ¬ν©λλ€.
System.out.println("μ€λ¦μ°¨μμΌλ‘ μ λ ¬νμ΅λλ€.");
for (int i = 0; i < nx; i++)
System.out.println("x[" + i + "]οΌ" + x[i]);
}
}
μμ κ³Όμ μ μ μ§νκ² μκ³ λ¦¬μ¦ κ³Όμ μ λ°μν μ½λμ΄λ€.
νμ§λ§ μ€μ μ λ ₯μ΄ μ μ©λ μκ³ λ¦¬μ¦ κ³Όμ μ μ΄ν΄λ³΄λ©΄ λͺ¨λ passλ₯Ό n-1ν λ°λ³΅ν νμκ° μλ€.
μΌμ passμμ κ΅νμμ΄ λΉκ΅κ³Όμ λ§ μ΄λ£¨μ΄μ§λ κ²½μ°κ° μ‘΄μ¬νλλ°
κ·Έ μν©μ μ λ ¬μ΄ μλ£λμλ€λ μ리μ κ°λ€.
κ΅ν νμλ₯Ό κΈ°λ‘νκ³ νμΈνλ μ‘°κ±΄μ΄ μΆκ°λλ€λ©΄ λΆνμν λ°λ³΅μ μ€μΌ μ μλ€.
# 2) κ°μ λ μ½λ 1
static void bubbleSort(int[] a, int n){
for(int i=0; i<n-1; i++){
int exchg = 0; // κ΅ν νμ κΈ°λ‘
for(int j=n-1; j>i; j--){
if(a[j-1]>a[j]){
swqp(a, j-1, j);
exchg++;
}
}
if(exchg == 0) break; // κ΅νμ΄ μ΄λ£¨μ΄μ§μ§ μμΌλ©΄ μ’
λ£
}
}