마치 거품이 일어나듯이 연쇄적으로 자기 자리를 찾아간다고 해서 버블 정렬이란 이름이 붙여졌다.
따라서 버블정렬의 특징은 n회차 돌때마다 오른쪽의 n번째 자리가 확정된다는 것이다.
function bubleSort(array) {
// array 오름차순 정렬할 array
for (let i=0; i < array.length; i++) {
let swap;
for (let j =0; j < array.length-1-i; j++) {
if (array[j] > array[j+1]) {
swap = array[j];
array[j] = array[j+1];
array[j+1] = swap;
}
}
console.log(i + '회차: ', array);
// swap 에 담긴 값이 없다면 정렬 완료 되었다는 뜻
if (!swap) {
break;
}
}
return array;
}
const testValue = bubleSort([5,3,1,9,3]);
console.log('testValue:', testValue);
cf)
1. 위 코드에서 사용했던 for문과 forEach의 차이
forEach는 읽기 전용임으로 배열의 수정이 불가하다.
2. sort() 메소드는 배열의 요소를 문자열로 캐스팅하여 순서를 매기는 메소드.
따라서 숫자를 비교할시 메소드 그대로 사용하지 못함.
var score = [4, 11, 2, 10, 3, 1];
/* 오류 */
score.sort(); // 1, 10, 11, 2, 3, 4
// ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지 않음
/* 정상 동작 */
score.sort(function(a, b) { // 오름차순
return a - b;
// 1, 2, 3, 4, 10, 11
});
score.sort(function(a, b) { // 내림차순
return b - a;
// 11, 10, 4, 3, 2, 1
});