활용 예제는 생각보다 어려운 내용이 있었다.
정렬 알고리즘 중에 하나인 버블정렬이 예제로 있었다.
// 버블정렬(bubble sort)
public static void main(String[] args) {
int[] numArr = new int[10];
for (int i=0; i < numArr.length; i++) {
System.out.print(numArr[i] = (int)(Math.random() * 10));
}
System.out.println();
for (int i=0; i < numArr.length-1; i++) {
boolean changed = false;
for (int j=0; j < numArr.length-1-i; j++) {
if(numArr[j] > numArr[j+1]) {
int tmp = numArr[j];
numArr[j] = numArr[j+1];
numArr[j+1] = tmp;
changed = true;
}
} // end for j
if (!changed) break; // 자리바꿈이 없으면 반복문을 벋어난다.
// 자리바꿈이 일어나면 changed = true, !changed = false, if (false) 이므로 if문을 건너뜀
// 자리바꿈이 없으면 changed=false, !changed=true, if(true)이므로 break문 실행
for(int k=0; k<numArr.length; k++)
System.out.print(numArr[k]);
System.out.println();
} // end of i
} // main의 끝
9086885293
0868852939
0688528399
0685283899
0652838899
0526388899
0253688899
0235688899
잘 이해가 안갔던 부분은 2가지이다.
for (int j=0; j < numArr.length-1-i; j++)
왜 numArr.length-1-i
이렇게 사용했는지 처음에는 잘 이해가 안갔다.
아니 이해가 안된다기보다는 이렇게까지 생각해야하는구나 라는 생각이 더 컸던 것 같다.
처음에는 이렇게까지 생각해야하는게 어렵게 느껴졌는데 몇번 보다보니 개념이 익숙해지는 것 같아서 다행이다.
if (!changed) break;
if문의 기본을 다시 생각하게 해줬다.
이런 내용 헷갈리지 않도록 하자!
아직 논리 연습이 많이 필요한 것으로 보인다!