정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.
버블 정렬(bubble sort)은 여러 정렬 알고리즘(삽입 정렬, 퀵 정렬, 병합 정렬, 기수 정렬 등) 중 가장 기본적인 알고리즘입니다.
버블 정렬 알고리즘은 아래와 같습니다.
이 모습이 마치 '거품이 밀려 올라가는 것과 같은 모습'과 같아서 bubble sort라고 부릅니다.
let output = bubbleSort([2, 1, 3]);
console.log(output); // --> [1, 2, 3]
sort사용을 하지 않고 bubble처럼 순차적으로 계산
for문으로 배열 진입 -> 내부에 또 다른 for문으로 각 배열 간 비교
처음으로 한바퀴를 다 돌면 다시 상위 for로 진행
전부 완료시 break로 탈출(이미 정렬이 된 상태에서도 계속 순회할 수 있기 때문)
const bubbleSort = function (arr) {
// TODO: 여기에 코드를 작성합니다.
// arr 길이를 가진 변수 n 생성
let n = arr.length;
// 전체 순환 for문 생성(오름차순 정렬이 한 번 끝나면 다시 돌기)
for(let i=0; i<n; i++){
// [2,1] 일 경우 앞의 요소 값을 저장해줄 변수 swap 생성
let swap = 0;
// 배열 요소를 비교하기 위한 for문 생성
// j<n-1-i인 이유는 -1은 for문 내에서 arr[j+1]로 마지막 요소까지 부르기 때문이고 -i는 이미 진행이 완료된 부분은 다시 할 필요가 없기 때문
// 예를 들어 [1,10,4,3] 을 진행하는 경우
// 첫 순환 시 [1,4,3,10]이 된다.
// 다음 i가 1이 되며 다시 for문을 돌 때 굳이 마지막에 있는 10까지갈 필요가 없기 때문에 n-1-i를 해주는 것이다.
for(let j=0; j<n-1-i; j++){
// arr[j]>arr[j+1]일 경우 swap을 통해 서로의 값을 바꾼다.
if(arr[j] > arr[j+1]){
swap = arr[j]
arr[j] = arr[j+1]
arr[j+1] = swap
}
}
// break가 없다면 loop가 이어져 실행초과가 된다.
if(!swap) break
}
return arr;
}