Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 리액트 가상키보드
- activeElement
- refetchOnWindowFocus
- 자바스크립트
- 자바스크립트 변수 호이스팅
- active blur
- 자바스크립트 논리합 연산자
- 로현 청춘의개발
- Kafka
- 사파리 가상키보드
- 자바스크립트 호이스팅
- 리액트 쿼리
- 모두의시간
- AWS 로드밸런서
- 퍼듀대학교
- React Query
- 자바스크립트 null 병합
- EC2 HTTPS로 연결
- but requested an insecure XMLHttpRequest endpoint 'http://~~’. This request has been blocked; the content must be served over HTTPS.
- net::R_SSL_PROTOCOL_ERROR
- 모던 자바스크립트 Deep Dive
- touchmove 이벤트
- K-SW SQUARE
- 자바스크립트 옵셔널 체이닝
- 자바스크립트 스코프 체인
- Purdue university
- ios 크로스브라우징
- 자바스크립트 중첩함수
- 자바스
- 자바스크립트 렉시컬스코프
Archives
- Today
- Total
개발 여행자, 현
[정렬 알고리즘] 버블정렬 본문
버블정렬
- 버블정렬는 선택정렬과 유사한 알고리즘으로 서로 인접한 두 원소의 대소를 비교하고, 조건에 맞지 않다면 자리를 교환하며 정렬하는 알고리즘 이다.
- 시간복잡도는 O(n^2) 이다. 정렬이 돼있던 안돼있던, 2개의 원소를 비교하기 때문에 최선, 평균, 최악의 경우 모두 시간복잡도가 O(n^2) 으로 동일하다.

버블정렬은 이웃한 2개의 숫자끼리 비교하면서 서로 바꿔주는 것이다.
앞선 선택정렬과 동일하게 이중 반복문을 이용하면 된다.
간단한 오름차순 문제를 풀어보자
function solution(arr) {
let answer = arr;
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return answer;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));
arr[j] > arr[j+1] 과 같이 앞과 뒤를 비교하는 것이기 때문에 0부터 n까지 돈다고 반복된다고 할 때 반복문 둘 다 n-1까지만 탐색하면 된다.
여기서 개선을 더 하고자 한다면
j는 arr.length-1-i를 하면 된다. 이미 정렬이 되어있는 부분까지는 확인하지 않아도 되기 때문이다.

그림 예시를 보면 이해하기 쉽다.
이중 반복문이 1번 돌 때 다음과 같이 배열이 변화된다.
5 13 11 7 23 15
5 11 13 7 23 15
5 11 7 13 23 15
5 11 7 13 15 23
젤 뒤에가 큰 숫자가 맨 뒤에 위치하는 것을 확인할 수 있다.
즉 버블정렬은 맨 뒷 자리부터 정렬이 된다.
장점으로는 구현이 매우 간단하고, 소스코드가 직관적이다.
하지만 시간복잡도가 최악, 최선, 평균 모두 O(n^2)이기에 비효율적이다.
'알고리즘' 카테고리의 다른 글
[정렬 알고리즘] 선택정렬 (0) | 2023.04.17 |
---|---|
[JavaScript] 프로그래머스 게임 맵 최단거리 (BFS) (1) | 2022.11.14 |
[JavaScript] 프로그래머스 타겟넘버 (DFS, 재귀함수) (0) | 2022.11.14 |
[JavaScript] 너비우선탐색(BFS) 깊이우선탐색(DFS)이란? (0) | 2022.11.06 |
[프로그래머스/JavaScript] K번째 수 (feat. 나의 첫번째 알고리즘 문제) (0) | 2021.10.16 |