[2, 3, 0, 1]의 경우
이중 for문을 돌면서
내부에서 2, 3을 비교 후 자리 변경 여부를 결정(false) 내부 for문은 값이 1 증가하여 3, 0을 비교 자리를 변경(true) 내부 for문의 값이 올라 3, 1을 비교하여 자리를 변경
외부 for문의 값이 1 올라간다. 이 때 [2, 0, 1, 3]
다시 2, 0을 비교 변경 2, 1을 비교 변경
2, 3을 비교 패스
다시 0, 1을 비교 ...
정렬 끝
내부 for문의 최대값이 i 만큼 줄어도 되는 이유는
이중 for문을 돌면서 한 번 돌아가는 경우 최소 한 번은 정렬이 이루어진다.
즉 오름차순의 경우 맨 처음 정렬의 경우 최소 맨 마지막 배열의 자리는 항상 정렬이 되는 것을 보장한다. 따라서 맨 마지막 자리는 픽스되었으므로 i가 올라간 만큼의 반복은 필요 없게 된다.