버블정렬은 위와 같은 방식으로 배열의 길이만큼 반복되어 진행된다.
i번째 수와 그 다음 수인 i+1번째 수의 크기를 비교하여, 더 큰 숫자가 뒤에 오게 한다.
위 표를 보면, 빨간 숫자 중 비어있는 칸이 있는데, 이 칸은 크기 비교가 진행되었을 때 i번째 수가 더 작아 두 수의 변화가 없다는 의미이다.
그리고 파란 숫자는 0번부터 배열의 길이-1번까지 숫자비교를 한 번 끝마쳤을 때의 배열이다.
마지막 수에 가장 큰 수인 9가 온 것을 확인할 수 있다.
let id=[9,0,1,8,7,2,5,4,6,3];
let temp=0;
for(let i=0; i<id.length; i++){
for(let j=0; j<id.length-1-i; j++){
if(id[j]>id[j+1]){
temp=id[j];
id[j]=id[j+1];
id[j+1]=temp;
}
}
console.log(id);
}
두 번째 for문에서 id.length-1-i까지 하는 이유를 알아보자.
두번째 for문이 진행될 때마다 console.log로 출력해주었다.
가장 끝에 있는 숫자가 큰 숫자로 채워져 나가는 것을 볼 수 있다.
처음 for문이 돌 때 끝 숫자 = ~9
그 다음은 = ~89
그 다음은 = ~789
이런 식으로 진행이 되기 때문에, 두 번째 for문은 id.length-1-i까지 진행해주도록 한다.
id.length나 id.length-1까지로 해주어도 코드는 돌아가지만 이미 정렬된 숫자까지 또 확인할 필요는 없기 때문에 id.length-1-i까지 하는 것이 좋다.