ALGORITHM/Theory
Bubble Sort
Harimad
2022. 4. 27. 18:32

참고 : 버블정렬(Bubble Sort)
목차
정렬 알고리즘 소개
기본 내장 자바스크립트 정렬
버블 정렬 : 개요
버블 정렬 : 구현
버블 정렬 : 최적화
버블 정렬 : 빅오 복잡도
정렬 알고리즘 소개
목표1. Bubble Sort2. Selectrion Sort3. Insertion Sort
기본 내장 자바스크립트 정렬
JS - Array.prototype.sort()
실행 과정
1. 옵셔널한 비교 함수를 인자로 받는다. (없어도 됨)
2. 비교함수에는 JS에게 어떻게 쓸것인지 써줘야한다.
3. 비교요소는 a 와 b같은 요소 쌍으로 이루어져 있다. 그리고 반환 값에 따른 비교 순서를 결정한다.
3-1. 만약 음수 값이 반환 되면, a -> b 순서가 된다.
3-2. 만약 양수 값이 반환 되면, b -> a 순서가 된다.
3-3. 만약 0 이 반환 되면, a와 b는 똑같은 값이다.
버블 정렬 : 개요

버블정렬 의사코드
1. 배열의 끝 인덱스를 i라는 변수를 사용하여 처음부터 루프를 시작한다.
2. 처음부터 i - 1까지 j라는 변수로 내부 루프를 시작한다.
3. arr[j]가 arr[j+1]보다 크면 이 두 값을 바꾼다!
4. 정렬된 배열을 리턴한다.
버블 정렬 : 구현 🎁
// UNOPTIMIZED VERSION OF BUBBLE SORT
function bubbleSort(arr){
for(var i = arr.length; i > 0; i--){ // 실행 횟수: 8번(배열인자 개수)
for(var j = 0; j < i - 1; j++){ // 비교 횟수 : 7->6->5->...->1번(1회씩 감소)
console.log(arr, arr[j], arr[j+1]);
if(arr[j] > arr[j+1]){ //a 와 b 비교 후 a가 크면 a,b 스와이프
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
// ES2015 Version
function bubbleSort(arr) {
const swap = (arr, idx1, idx2) => {
[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]];
};
for (let i = arr.length; i > 0; i--) {
for (let j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
return arr;
}
bubbleSort([8,1,2,3,4,5,6,7]);
버블 정렬 : 최적화
더 이상 스왑 할게 없다면 외부 반복문 종료
// Optimized BubbleSort with noSwaps
function bubbleSort(arr){
var noSwaps;
for(var i = arr.length; i > 0; i--){
noSwaps = true; // ① 계속 true로 설정
for(var j = 0; j < i - 1; j++){
if(arr[j] > arr[j+1]){
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
noSwaps = false; // ③ swap 한다면 noSwap을 false로 만듦 -> 반복문 종료안함
}
}
if(noSwaps) break; // ② true면 반복문 종료
}
return arr;
}
bubbleSort([8,1,2,3,4,5,6,7]);
버블 정렬 : 빅오 복잡도
O(n²) - Worst, Average
O(n) - Best
