JavaScriptλ‘ μμ보λ λ²λΈ μ λ ¬(Bubble Sort)κ³Ό μμ μ½λ
μκ°
λ²λΈ μ λ ¬(Bubble Sort)μ κ°μ₯ κ°λ¨νκ³ κΈ°λ³Έμ μΈ μκ³ λ¦¬μ¦ μ€ νλλ‘, μ΄λ¦μμλ μ μ μλ―μ΄ λ°°μ΄μ μμλ₯Ό 'κ±°ν(Bubble)'μ²λΌ μλ‘ κ΅νν΄ κ°λ©° μ λ ¬νλ λ°©μμ λλ€.
μ¦, μλ‘ μΈμ ν λ μμλ₯Ό λΉκ΅ν΄κ°λ©° μ€λ¦μ°¨μμ΄λ λ΄λ¦Όμ°¨μμΌλ‘ μ μ μ§νν©λλ€.
κΈ°λ³Έ κ°λ
λ²λΈ μ λ ¬μ κ°λ μ λ§μ½ μ«μ λ°°μ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ μν©μμ λ ν° μ«μκ° ν λ²μ νλμ© λ€λ‘ μ΄λνλ λ°©λ²μ λλ€.
κΈ°λ³Έμ μΌλ‘ μ΄λ€ νλͺ©μ΄ λ ν¬λ©΄ κ΅ννκ³ , λ€μ νλͺ©κ³Ό λΉκ΅νκ³ , λ€μ νλͺ©λ³΄λ€ λ ν¬λ©΄ λ κ΅νμ νκ³ , λ€μ λ€μ νλͺ©κ³Ό λΉκ΅νλ©΄μ λ°λ³΅μ ν©λλ€.
μ€λ¦μ°¨μμ μν©μμλ κ°μ₯ ν° κ°μ΄ μλ¨μ ν₯ν΄μ κ°μ μ λ ¬νλ λ°©μμΌλ‘ λͺ©λ‘μ λ§λλλ€.
μμ μ½λ #1
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
κΈ°λ³Έμ μΈ λ²λΈ μ λ ¬ μ½λμ λλ€.
ν΄λΉ μ½λλ μ΄μ€ λ°λ³΅λ¬Έμ ν΅ν΄μ μΈμ ν μμμ λν΄μ ν¬κΈ°λ₯Ό λΉκ΅νλ©° μμΉλ₯Ό λ°κΎΈλ©΄μ μ λ ¬μ μ§νν©λλ€.
νμ§λ§ μ΄ μ½λλ μ΄λ―Έ μ λ ¬μ΄ λ μνμμλ λ²λΈ μ λ ¬μ΄ μλνλ μ리 λλ¬Έμ λ λΆλΆμ indexκ° μλ κ³³κ³Ό λΉκ΅ν΄μ undifinedμ 무μλ―Έν λΉκ΅λ₯Ό νκ³ , μ΄λ―Έ μ λ ¬μ΄ λ μνμμλ λΆνμν μ°μ°μ ν λ°λ³΅λ¬Έμ λκ² λ©λλ€.
μ¦, j < arr.length 쑰건 λλ¬Έμ arr[j + 1]κ° λ°°μ΄ λ²μλ₯Ό μ΄κ³Όνλ κ²½μ°κ° μκΉλλ€.
κ·Έλμ λ§μ§λ§ μμμ undefinedλ₯Ό λΉκ΅νλ λ¬Έμ κ° λ°μν©λλ€.
μ΄λ κ² λλ©΄ λΆνμν μ°μ°μ μννκ² λ©λλ€.
μ΅μ νλ μ½λ
function bubbleSort(arr) {
let noSwaps;
for (let i = arr.length; i > 0; i--) {
noSwaps = true;
for (let j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
noSwaps = false;
}
}
if (noSwaps) break;
}
return arr;
}
j < arr.length - i - 1λ‘ λ§μ§λ§ μμμ undefinedλ₯Ό λΉκ΅νλ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
κ·Έλ¦¬κ³ μ²«λ²μ§Έ μμ μ½λμμλ μ΄λ―Έ μ λ ¬μ΄ λ μνμμλ λ°λ³΅λ¬Έμ΄ λλ©΄μ μ°μ°μ μννμ§λ§ ν΄λΉ μ½λλ λ°λ³΅λ¬Έμ΄ μ§νλλ©΄μ κ΅ν μμ μ΄ μλ€λ©΄ λ°°μ΄μ μ΄λ―Έ μ λ ¬λ κ²μΌλ‘ κ°μ£Όνκ³ νλ‘κ·Έλ¨μ μ’ λ£νκ² λ©λλ€.
λ°λΌμ, λ°°μ΄μ΄ κ±°μ μ λ ¬λ μνλΌλ©΄ λ°°μ΄μ κΈΈμ΄κ° κΈΈμ΄μ§μ λ°λΌ μ μ½λμλ μμ£Ό ν° μ°¨μ΄κ° μκΉλλ€.
λ²λΈ μ λ ¬μ μκ° λ³΅μ‘λ(Big O)
λ°°μ΄μ κ° νλͺ©λ§λ€ nλ²μ λΉκ΅λ₯Ό νκ³ λ°°μ΄μ λ€λ₯Έ λͺ¨λ νλͺ© νλνλ λΉκ΅νκΈ° λλ¬Έμ μΌλ°μ μΌλ‘ λ²λΈ μ λ ¬μ μκ° λ³΅μ‘λλ O(N^2)μ λλ€.
κ·Έλ¬λ λ°μ΄ν°κ° κ±°μ μ λ ¬λμκ±°λ μ΄λ―Έ μ λ ¬μ΄ μλ£λ μνμμ noSwaps λ³μκ° μλ μ½λλ₯Ό μ¬μ©νλ©΄ μ ν μκ°(Linear Time)μ κ°κΉμμ§λλ€. μλ₯Ό λ€μ΄, [1, 2, 3, 4, 5]μ κ°μ μ΄λ―Έ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°°μ΄μμλ 첫 λ²μ§Έ ν¨μ€ λμ μ΄λ ν κ΅νλ λ°μνμ§ μμ μκ³ λ¦¬μ¦μ΄ μ¦μ μ’ λ£λ©λλ€.
λ°λΌμ μ΄ κ²½μ° λ²λΈμ λ ¬μ μκ° λ³΅μ‘λλ O(N)μΌλ‘ μ€μ΄λ€κ² λ©λλ€.
λ€λ§ μ£Όλͺ©ν΄μΌ ν μ μ μ΄λ¬ν μ΅μ ν μ¬νλ€μ 'μ΅μ 'μ κ²½μ°μ ν΄λΉνλ©° μΌλ°μ μΈ μν©μμ λ²λΈμ λ ¬μ μ¬μ ν O(N^2)μ μκ° λ³΅μ‘λλ₯Ό κ°μ§λ€λ κ²μ
λλ€.