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문에서 한바퀴를 돌면 이미 제일 큰 숫자는 맨 오른쪽에 자리하고 있을것이다.

- 그렇기에 마지막 배열까지 비교를 할 필요가 없다.

 

 

 

 

+ Recent posts