버블정렬(Bubble Sort)
버블 정렬은 인접한 데이터를 교환해서 정렬하는 알고리즘입니다. 알고리즘의 정렬되는 모습이 마치 거품처럼 보인다고 해서 붙여진 이름입니다.
아래와 같은 정렬되지 않은 수가 있을 때, index 0 <-> 1 부터 교환하기 시작합니다. 인접한 두 수를 비교하여 더 큰 것을 우측으로 이동시킵니다. 6 5 3 2 8 -> 5 6 3 2 8
그 다음은 index 1 <-> 2 5 6 3 2 8 -> 5 3 6 2 8
그 다음은 index 2 <-> 3 5 3 6 2 8 -> 5 3 2 6 8
그 다음은 index 3 <-> 4 5 3 2 6 8 -> 5 3 2 6 8 이렇게 제일 마지막 두 수 까지 비교하면, 제일 큰 수가 제일 마지막 index에 위치하는 것을 알 수 있습니다.
다시 처음부터 시작합니다. 5 3 2 6 8 -> 3 5 2 6 8
3 5 2 6 8 -> 3 2 5 6 8
3 2 5 6 8 -> 3 2 5 6 8 이번 교환에는 index 2까지 비교하고 멈추면 됩니다. 마지막 index는 이미 제일 큰 수가 정렬된 상태이기 때문입니다. 이런식으로 계속 비교하고 교체하면 됩니다.!
Problem
nums라는 배열을 주면, 버블정렬 알고리즘으로 배열을 정렬해주세요.
const nums = [2, 5, 6, 3, 2, 8 ]
const bubbleSort = nums => {
for(let i = 0 ; i<nums.length ; i++){ //⭐
for(let j=0 ; j<nums.length - i - 1 ; j++){ //⭐
if(nums[j]>nums[j+1]) {
[nums[j],nums[j+1]] = [nums[j+1],nums[j]] //⭐ 배열 앞뒤의 순서 변경
}
}
}
return nums
}
bubbleSort(nums)
i=0 일 때, j=0 ~ j=nums.length-1 인덱스 값을 활용하여 가장 큰수를 뒤로 이동시킨다. (8)
i=1 일 때, j=0 ~ j=nums.length-1-1 인덱스 값을 활용하여(8까지는 정렬되어있기때문에 그 앞 숫자까지만 비교하여 정렬) 가장 큰수를 뒤로 이동시킨다.(6)
i=2 일 때, j=0 ~ j=nums.length-2-1 인덱스 값을 활용하여(6까지는 정렬되어있기때문에 그 앞 숫자까지만 비교하여 정렬) 가장 큰수를 뒤로 이동시킨다.(5)
.
.
.
i=nums.length-1일 때, j=0 인덱스 값을 활용하여 가장 큰수를 뒤로 이동시킨다.