2023. 11. 9. 10:04ㆍ알고리즘
| 버블 정렬
버블 정렬은 오름차순을 예로 들었을 때 가장 작은 숫자와 바로 옆인 큰 숫자를 비교하며 위치를 바꿔주는 알고리즘이다.
더 큰 숫자가 한번에 하나씩 이동한다.
이 알고리즘은 제일 큰 숫자를 맨 뒤로 이동 시키며 정렬을 한다.
| 작동 원리
0번째 부터 loop를 실행하고 첫 순서는 14와 21을 비교한다.
14는 21보다 크지 않음으로 위치를 바꾸지 않고 21과 37을 비교한다.
21 또한 37보다 크지 않음으로 위치를 유지한다.
그리고 37과 5를 비교한다.
37을 5보다 큼 으로 위치를 바꿔준다.
계속해서 이런 방식으로 진행 하다 보면
첫번째 loop 이후
마지막 숫자가 정해진다.
그리고 계속해서 똑같은 작업을 반복한다.
반복 이후 이렇게 오름차순 으로 정렬 된다.
| 버블 정렬 구현 [JS]
구현은 이중 for문을 돌며 현재의 값이 다음 값보다 크면 배열의 위치를 바꿔준다.
ES2015 문법을 사용했다.
기존에 사용하던 temp변수를 만들어서 위치를 바꿔줘도 상관없다.
또한 swap이라는 함수를 만들어서 사용해도 무관하다.
이 코드에는 문제점이 있다.
무조건 전체요소를 비교하고 순회 한다는 것이다.
확실하게 알아보려면 이중 for문 내부에서 console 로 numbers를 출력 해보면 총 15번이 출력된다.
그래서 코드를 최적화 하면 불필요한 loop는 실행 할 필요가 없다.
| 버블 정렬 최적화 [JS]
기존의 코드와 동일하지만 isSwap이라는 변수를 선언하고 기본값으로 true를 할당했다.
이 코드는 해당 요소가 뒤의 요소보다 크면 위치를 바꾸고 isSwap을 false로 값을 바꾼다.
그렇게 되면 불필요한 loop는 돌 수 없다.
최적화 작업을 진행 하기 전에는 console이 15번 출력 되었지만
진행 이후에는 8번이 출력 되었다.
| 버블 정렬의 BigO
최적화를 진행하기 전 에는 n의 제곱 시간을 가지지만 최적화를 진행한다면 선형시간 (linear time) 을 가질 수도 있다.
'알고리즘' 카테고리의 다른 글
스택/큐 (Stack | Queue) (2) | 2023.12.18 |
---|---|
해시 [Hash] (1) | 2023.12.12 |
이진 검색 (Binary Search) (1) | 2023.10.11 |
선형 검색 (Linear Search) (0) | 2023.10.10 |
재귀함수 (recursion) (0) | 2023.10.09 |