코드카타 #22 버블정렬

버블 정렬이란?

버블 정렬은 인접한 데이터를 교환해서 정렬하는 알고리즘입니다. 알고리즘의 정렬되는 모습이 마치 거품처럼 보인다고 해서 붙여진 이름입니다.

아래와 같은 정렬되지 않은 수가 있을 때, index 0 <-> 1 부터 교환하기 시작합니다. 인접한 두 수를 비교하여 더 큰 것을 우측으로 이동시킵니다. 6 5 3 2 8 -> 5 6 3 2 8

그 다음은 index 1 <-> 2 5 6 3 2 8 -> 5 3 6 2 8

그 다음은 index 2 <-> 3 5 3 6 2 8 -> 5 3 2 6 8

그 다음은 index 3 <-> 4 5 3 2 6 8 -> 5 3 2 6 8 이렇게 제일 마지막 두 수 까지 비교하면, 제일 큰 수가 제일 마지막 index에 위치하는 것을 알 수 있습니다.

다시 처음부터 시작합니다. 5 3 2 6 8 -> 3 5 2 6 8

3 5 2 6 8 -> 3 2 5 6 8

3 2 5 6 8 -> 3 2 5 6 8 이번 교환에는 index 2까지 비교하고 멈추면 됩니다. 마지막 index는 이미 제일 큰 수가 정렬된 상태이기 때문입니다. 이런식으로 계속 비교하고 교체하면 됩니다.!

버블정렬 장점

  • 구현이 간단하다.
  • 데이터를 하나씩 비교하기 때문에 정밀한 비교가 가능하다.

버블정렬 단점

  • 데이터를 하나씩 비교하기 때문에 비교 횟수가 많아지므로 시간이 오래 걸린다.

문제

nums라는 배열을 주면, 버블정렬 알고리즘으로 배열을 정렬해주세요.

풀이

const nums = [8, 4, 9, 3, 6, 1 ]

const bubbleSort = nums => {
 for(let i = 0 ; i< nums.length ; i++){           
   for(let j = 0 ; j< nums.length - i - 1 ; j++){   
    if(nums[j]>nums[j + 1]) {
      [nums[j],nums[j + 1]] = [nums[j + 1],nums[j]]  
    }
   }
 }
  return nums
}

bubbleSort(nums)

간단한 회고

요번 알고리즘을 풀면서 과연 이 버블정렬을 쓰는날이 올까 생각이 들었다.
다음번에 쓸수 있는 기회가 되면 한번 써보고 코드 분석을 해서 포스팅을 해봐야겠다.

좋은 웹페이지 즐겨찾기