정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.
버블 정렬(bubble sort)은 여러 정렬 알고리즘(삽입 정렬, 퀵 정렬, 병합 정렬, 기수 정렬 등) 중 가장 기본적인 알고리즘입니다.
버블 정렬 알고리즘은 아래와 같습니다.
위에서 설명한 알고리즘을 구현해야 합니다.
arr.sort 사용은 금지됩니다.
입력으로 주어진 배열은 중첩되지 않은 1차원 배열입니다.
let output = bubbleSort([2, 1, 3]);
console.log(output); // --> [1, 2, 3]
const bubbleSort = function (arr) {
for(let i = 0; i < arr.length; i++) {
let breakPoint = 0; // // 브레이크 포인트를 만들어서 바꿀게 없을때 브레이크
for(let j = 0; j < arr.length; j++) {
if(arr[j] > arr[j + 1]) {
breakPoint++
let change = arr[j] // 반복문으로 모든 수를 비교하여 앞에 큰 값이 생기면 배열의 위치를 바꾼다.
arr[j] = arr[j + 1]
arr[j + 1] = change
}
}
if(breakPoint === 0) break; //배열이 완성됐는지 안됐는지 확인하기 위한 브레이크 포인트 작성
}
return arr; // 반복문 끝나고 배열 리턴
};
debugger;
bubbleSort([1,5,3,2]);
arr = [1,5,3,2] 가 들어가면
두번째반복문에 들어와서
arr[0]과 arr[1] 값을 비교한다.
arr[0]이 크지 않기 때문에, 반복문이 다시 돈다.
// arr=[1,5,3,2]
arr[1]과 arr[2]를 비교한다.
arr[1]이 arr[2]보다 크기 때문에, breakpoint를 추가한다.
arr[1]의값을 change라는 변수에 저장하고
arr[1]의 값을 arr[2]의 값으로 바꾸고,
arr[2]의 값을 change라는 변수의 값으로 바꾼다.
// arr=[1,3,5,2]
arr[2]와 arr[3]을 비교한다.
arr[2]가 arr[3]보다 크기 때문에, breakpoint를 추가한다.
arr[2]의값을 change라는 변수에 저장하고
arr[3]의 값을 arr[2]의 값으로 바꾸고,
arr[2]의 값을 change라는 변수의 값으로 바꾼다.
// arr= [1,3,2,5]
그 다음에 비교할 값이 없기때문에
if(breakPoint === 0) break; 여기로 가지만, 0이 아니므로 다시 첫번째 for 구문이 돌아간다.
최대 length까지 하면 다 살펴볼수 있고, 이미 배열이 완성되면 breakpoint로 빠져나올수 있다.