[์ •๋ ฌ] Bubble Sort

๋ฒ„๋ธ” ์ •๋ ฌ์˜ ๊ฐœ๋…

๋ฒ„๋ธ” ์ •๋ ฌ ์ˆ˜ํ–‰๋„

๋ฒ„๋ธ” ์ •๋ ฌ์ด๋ž€?

์„œ๋กœ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ์˜ ๋Œ€์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ , ๋‘ ์›์†Œ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ž๋ฆฌ๋ฅผ ๊ตํ™˜ํ•˜๋ฉฐ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
์„ ํƒ ์ •๋ ฌ๊ณผ ๊ธฐ๋ณธ ๊ฐœ๋…์ด ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ฒ„๋ธ”์ •๋ ฌ์€ ์„ ํƒ์ •๋ ฌ๊ณผ ๋‹ค๋ฅด๊ฒŒ 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 ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ๋‹ค.