22.04.13 자바_배열의 활용

Saparian·2022년 4월 13일
0

오늘의배움

목록 보기
48/53

활용 예제는 생각보다 어려운 내용이 있었다.

정렬 알고리즘 중에 하나인 버블정렬이 예제로 있었다.

// 버블정렬(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문의 기본을 다시 생각하게 해줬다.

    • if (조건식) {수행문} : 조건식이 참이라면 수행문을 실행한다!
      changed가 false값 그대로면 자리바꿈이 일어나지 않은 것이므로 정렬이 완료됐다! -> 반복문 탈출
      changed가 true라면 자리바꿈이 일어난 것임 -> 조건문 만족 X

이런 내용 헷갈리지 않도록 하자!
아직 논리 연습이 많이 필요한 것으로 보인다!

0개의 댓글