int[] arr = new int[] {2, 5, 3, 6, 8, 1}
for(int i=0; i < arr.length; i++) { ㉠
for(int j=0; j < arr.length-1-i; j++) { ㉡
if(arr[j] > arr[j+1]) { ㉢
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
㉠
- 6번 반복
㉡
for(int j=0; j < arr.length-1-i; j++)
- 조건을 arr.length-1-i와 같이 작성한 이유는 배열의 길이는 6이지만 배열은[5]이기 때문이다.
(j는 최대 4를 넘을 수 없다.)
- 우리는 arr[0]과 arr[1] ...... arr[4] arr[5] 2개씩 비교 할 것이다.
- 2개씩 비교하러면 arr[j] > arr[j+1] 이런식으로 비교해야 하는데 j가 5가되버리면?
arr[5] > arr[5+1]
이렇게 비교해야하는데 우리의 arr 배열은 길이가 6이다.
arr[5+1]과 같이 되어버리면 배열의 길이가 7이 되어버리기 때문에 outBound 에러가 발생한다.
첫 for문의 주인공인 i는 어떤 역할을 할까
- 안쪽 for문에서 한바퀴를 돌면 이미 제일 큰 숫자는 맨 오른쪽에 자리하고 있을것이다.
- 그렇기에 마지막 배열까지 비교를 할 필요가 없다.