|
| 1 | +--- |
| 2 | +title: "버블 정렬 (Bubble Sort)" |
| 3 | +description: "버블 정렬 알고리즘" |
| 4 | +date: "2025-09-15T10:53:00" |
| 5 | +thumbnail: "./thumbnail.png" |
| 6 | +category: "Algorithm" |
| 7 | +tags: ["Algorithm", "Sorting"] |
| 8 | +--- |
| 9 | + |
| 10 | +안녕하세요. 이번글은 버블 정렬 알고리즘이에요. |
| 11 | + |
| 12 | +# 버블 정렬 (Bubble Sort) |
| 13 | + |
| 14 | +버블 정렬이 뭘까요. |
| 15 | + |
| 16 | +일단 시각적으로 한번 보는게 좋을것 같아요. |
| 17 | + |
| 18 | +[Visualgo - Sorting](https://visualgo.net/en/sorting) |
| 19 | + |
| 20 | +여기서 상단에 "Bubble Sort" 선택 후 왼쪽 하단에 "Sort" 버튼을 누르시면 시각적으로 버블 정렬이 어떻게 동작하는지 확인할 수 있어요. |
| 21 | + |
| 22 | +다음은 버블정렬을 자바스크립트 코드로 구현한 예시입니다. |
| 23 | + |
| 24 | +```ts |
| 25 | +function bubbleSort(arr) { |
| 26 | + let noSwaps; |
| 27 | + |
| 28 | + for (let i = arr.length; i > 0; i--) { |
| 29 | + noSwaps = true; |
| 30 | + for (let j = 0; j < i - 1; j++) { |
| 31 | + // SWAP 로직 |
| 32 | + if (arr[j] > arr[j + 1]) { |
| 33 | + let temp = arr[j]; |
| 34 | + arr[j] = arr[j + 1]; |
| 35 | + arr[j + 1] = temp; |
| 36 | + noSwaps = false; |
| 37 | + } |
| 38 | + } |
| 39 | + if (noSwaps) break; |
| 40 | + } |
| 41 | + |
| 42 | + return arr; |
| 43 | +} |
| 44 | +``` |
| 45 | + |
| 46 | +> `noSwaps` 변수는 굳이 Swap이 필요하지 않은 상황일 때 Swap 하는 상황을 방지하기 위하여 선언한 변수에요. |
| 47 | +
|
| 48 | +기본적으로 위와같이 구현할 수 있습니다. |
| 49 | + |
| 50 | +위 로직에서 For문에서 i를 배열의 길이로 먼저 설정하는 이유는 의미있는 반복을 하기 위해서에요. |
| 51 | + |
| 52 | +만약 i를 0부터 `arr.length` 까지 반복한다고하면 반복문은 다음과 같이 바뀌어야할거에요. |
| 53 | + |
| 54 | +```ts |
| 55 | +for (let i = 0; i < arr.length; i++) { |
| 56 | + for (let j = 0; j < arr.length; j++) { |
| 57 | + // ... |
| 58 | + } |
| 59 | +} |
| 60 | +``` |
| 61 | + |
| 62 | +반복문 부분을 위 처럼 작성해도 동작은 할거에요. |
| 63 | +대신 안쪽 For문은 무조건 `arr.length` 만큼 반복하게되요. |
| 64 | + |
| 65 | +버블정렬 특성상 한 사이클을 지나고나면, 맨 뒤 요소는 고정이 되는데 말이에요. |
| 66 | + |
| 67 | +그래서 해당 반복문 부분을 |
| 68 | + |
| 69 | +```ts |
| 70 | +for (let i = arr.length; i > 0; i--) { |
| 71 | + for (let j = 0; j < i - 1; j++) {} |
| 72 | +} |
| 73 | +``` |
| 74 | + |
| 75 | +이렇게 작성하게되면, 이미 정렬된 맨 뒤 요소까지는 Swap 로직을 실행하지 않게되서 좀 더 효율적이게 되는것이죠. |
| 76 | + |
| 77 | +여기까지 버블정렬 알아봤구요 |
| 78 | + |
| 79 | +감사합니다 |
0 commit comments