버블정렬


:raising_hand: 알고리즘 공부 간 기록이 필요한 문제들에 대한 정리를 기록하는 포스트 입니다.


개요


선택정렬을 했으니 버블정렬도 해봐야겠다.

개인적으로 버블정렬은 변경이 많아서 성능상 크게 좋다고는 생각하지 않는다. 하지만 간단해서 이해하기는 쉽다.

1. 문제 요건


  • 입력된 배열값을 버블정렬하라.

2. 코드


function solution(arr) {
  // 얕은 복사
  let answer = arr
  // 첫번째 반복문
  for(let i=0; i<arr.length; i++) {
    // 두번쨰 반복문이며 j는 0부터 배열의 길이 - i -1 미만으로 범위를 정한다.
    for(let j=0; j<arr.length-i-1; j++) {
      // 다음 인덱스 value 값이 더 작으면 교환한다.
      if(arr[j] > arr[j+1]) {
        [arr[j], arr[j+1]] = [arr[j+1], arr[j]]
      }
    }
  }
  
  return answer
}
console.log(solution([13,5,11,7,23,15]));

3. 결과정리


버블정렬은 현재 index다음 index 값의 크기를 비교해서 바꾸는 정렬이다.

하지만, 풀어보면 굉장히 많은 배열값 변경이 일어나게된다. 그래서 대체로 성능이 좋지 않다는 의견이 많다.

버블정렬에서 중요한 부분은 두번째 반복문의 값을 어디까지 해야되는가? 이다.

소스에서보면 arr.length-i-1 미만으로 잡았는데 뭐 끝까지 비교를 해도 결과값을 다르지 않지만 필요없는 반복문이 계속 실행되게 된다.