맛있는물회

[맛있는물회] <자바> 배열(array) - 2 본문

IT/자바

[맛있는물회] <자바> 배열(array) - 2

맛있는물회 2018. 7. 4. 19:12

기말고사 내용 따라가려면 부지런히 해야겠다. 언제 객체 다하고 쓰레드로 넘어갈지.. ㅠㅠ

오늘은 배열 뒷부분을 다 봤다.


배열의 활용 부분에서 '총합과 평균', '최대값 최소값', 'shuffle', '임의의 값으로 배열 채우기' 등은 c에서 배운 부분과 매우 유사하기 때문에 모르는 부분만 정리하겠다.

01. java.lang 에 있는 Math class의 Math.random함수는 double값을 리턴하기 때문에 int에 저장할때 (int)이렇게 형변환을 해주어야한다.


-> int n = (int)(Math.random() *10);


==0~9중의 한 값을 임의로 얻는다.

02. System.out.print(numArr[i] = (int)(Math.random() * 10); 처럼 프린트문 안에서 초기화가 가능하다.



* 버블 정렬(bubble sort)라는 알고리즘이 나와 소개하겠다.


비효율적이지만 가장 간단한 sorting 알고리즘이다.


-> 예를 들어 다음과 같이 길이가 5일 int배열이 있을 때, 첫 번째와 두번째 요소의 값을 비교해, 왼쪽 요소의 값이 


크면 두 값의 위치를 바꾸고, 그렇지 않으면 바꾸지않는다. 이러한 비교와 자리바꿈을 반복하는 알고리즘이다.



    3 1 4 2 0  (왼쪽의 값이 크므로 두 값의 자리를 바꾼다)
    1 3 4 2 0 (왼쪽의 값이 작으므로 두 값의 자리를 바꾸지 않는다.)


이러한 작업을 배열의 끝에 도달할  때 까지 반복하면 배열에서 제일 큰 값이 배열의 마지막 값이 된다.

-> 1 3 2 0 4


비교횟수는 모두 4번이며, 이 값은 배열의 길이보다 1이 작은 값(numArr.length - 1)이다.


최대값이 젤 오른쪽으로 가게되면 나머지를 다시 sorting할 때 최대값을 비교할 필요 없이 1이 작은 값 만큼 비교를 하면 된다.


따라서 매 반복마다 비교 횟수가 1씩 줄어들기 때문에 바깥족 for문의 제어변수 i 를 빼주는 것이다.


void BubbleSorting() {
          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 temp = numArr[j];
                                        numArr[j] = numArr[j+1];
                                        numArr[j+1] = temp;
                                        changed = true; 
                              }
                    }
         if (!changed) break
}



(출처 - 자바의 정석)


Comments