Computer Science/μ•Œκ³ λ¦¬μ¦˜

[μ •λ ¬] Bubble Sort

육볡 2020. 4. 21. 00:58

버블 μ •λ ¬μ˜ κ°œλ…

버블 μ •λ ¬ μˆ˜ν–‰λ„

버블 μ •λ ¬μ΄λž€?

μ„œλ‘œ μΈμ ‘ν•œ 두 μ›μ†Œμ˜ λŒ€μ†Œλ₯Ό λΉ„κ΅ν•˜κ³ , 두 μ›μ†Œμ˜ μœ„μΉ˜κ°€ λ°”λ€Œμ–΄μ•Ό ν•œλ‹€λ©΄ 자리λ₯Ό κ΅ν™˜ν•˜λ©° μ •λ ¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
선택 μ •λ ¬κ³Ό κΈ°λ³Έ κ°œλ…μ΄ μœ μ‚¬ν•˜μ§€λ§Œ, 버블정렬은 선택정렬과 λ‹€λ₯΄κ²Œ SWAP이 κ³„μ†μ μœΌλ‘œ μΌμ–΄λ‚œλ‹€.

버블 μ •λ ¬μ˜ λ™μž‘ 방식과 κ΅¬ν˜„

λ™μž‘ 방식

1. n-1개의 λ°μ΄ν„°μ˜ μœ„μΉ˜λ§Œ 찾으면 λ˜λ―€λ‘œ n-1번 λ°˜λ³΅ν•œλ‹€. (n-1개의 λ°μ΄ν„°μ˜ μœ„μΉ˜κ°€ μ •ν•΄μ§€λ©΄ λ‚˜λ¨Έμ§€ 1κ°œλŠ” μžλ™ μ •λ ¬)

  1-1. μ•žμ—μ„œλΆ€ν„° λ²„λΈ”μ²˜λŸΌ μ˜¬λΌκ°€λ©° 2개의 데이터씩 짝지어 λΉ„κ΅ν•œλ‹€. 

        1-1-1. 2개의 데이터λ₯Ό λΉ„κ΅ν•˜μ—¬ μœ„μΉ˜κ°€ λ°”λ€Œμ–΄μ•Ό ν•œλ‹€λ©΄ SWAPν•œλ‹€. 

1λ²ˆμ„ ν•œλ²ˆ λ°˜λ³΅ν•  λ•Œλ§ˆλ‹€ μ •λ ¬λ˜μ§€ μ•Šμ€ 데이터듀 쀑 κ°€μž₯ 큰 값이 λ’€λ‘œ μ΄λ™ν•œλ‹€. (즉, 반볡 ν•œλ²ˆ λ‹Ή ν•˜λ‚˜μ˜ 데이터가 무쑰건 정렬됨)

κ΅¬ν˜„

  for(var i=array.length-1; i>=0; i--) {
    for(var j=0; j<i; j++) {
        if(array[j] > array[j+1]) {
          SWAP(j, j+1);
        }
    }
  }
  
  function SWAP(x, y) {
    var temp = array[x]
    array[x] = array[y];
    array[y] = temp; 
  }

μ‹¬μ‹¬ν•΄μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ κ΅¬ν˜„!

Big-O

비ꡐ 횟수

  1. μ΅œμƒ, μ΅œμ•…, 평균 λͺ¨λ‘ 일정함 (정렬이 λ˜μ–΄μžˆλ“  μ•„λ‹ˆλ“  항상 2개의 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜κΈ° λ•Œλ¬Έμ—) 
  2. n-1, n-2, ...., 2, 1 번 이루어지기 λ•Œλ¬Έμ— 총 n(n-1)/2번 일어남 

κ΅ν™˜ 횟수 

  1. λ§Œμ•½ μž…λ ₯ 데이터가 μ—­μˆœμœΌλ‘œ λ‚˜μ—΄λ˜μ–΄ μžˆλŠ” 경우, SWAP 연산은 비ꡐ 횟수만큼 일어남 
  2. SWAP 연산은 3번의 이동이 ν•„μš”ν•˜λ―€λ‘œ 총 μ—°μ‚° μˆ˜λŠ” 3 * n(n-1)/2 
  3. λ”°λΌμ„œ T(n) = O(n^2)

버블 μ •λ ¬μ˜ μž₯단점

μž₯점 

  1. μ•Œκ³ λ¦¬μ¦˜ μžμ²΄κ°€ 맀우 κ°„λ‹¨ν•˜λ―€λ‘œ λ‹€λ₯Έ λ³΅μž‘ν•œ μ •λ ¬ 방법보닀 κ΅¬ν˜„μ΄ 맀우 κ°„λ‹¨ν•˜λ‹€. 
  2. λ°°μ—΄ μ•ˆμ—μ„œ κ΅ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μΆ”κ°€ λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€.
  3. Stable Sort이닀.

단점

  1. μΈμ ‘ν•œ μš”μ†Œμ™€ 비ꡐ ν›„ λ°”λ‘œ SWAP이 μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— λ§Žμ€ SWAP 연산이 μˆ˜ν–‰λœλ‹€.