본문 바로가기
Programming/Java

[Java] 배열 - 크기별로 정렬하기

by hongchii 2021. 2. 26.
728x90
반응형
더보기

출처, 자바의정석

 

버블정렬 알고리즘을 사용하여 크기별로 정렬하는 예제.

 

버블정렬 : 배열의 길이가 n일 때, 배열의 첫 번째부터 n-1까지의 요소에 대해 근접한 값과 크기를 비교하여 자리바꿈을 반복하는 것이다.

 

 

package Ch5;

public class ArrayEx10 {

	public static void main(String[] args) {
// --1
		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();

// --2
		for (int i = 0; i < numArr.length - 1; i++) {
			boolean changed = false; // 자리바꿈이 발생했는지 체크
// --3
			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; // 자리 바꿈이 발생했으니 true
				}
			}
// --4        
			if (!changed)
				break; // 자리바꿈이 없으면 반복문을 벗어남
// --5
			for (int k = 0; k < numArr.length; k++) { 
				System.out.print(numArr[k]);
			}
			System.out.println();

		}
	}

}

 

// --1
길이가 10인 배열을 생성하고 random()메소드를 사용하여 10개의 숫자를 for문을 돌려 numArr[i]에 저장한다.

// --2
자리바꿈이 발생했는지 체크하기위해 boolean형 changed 변수를 선언한다.

// --3
for문을 돌려 값이 비교한다.  (조건식을 numArr.length-1 로 한 이유는 for문을 돌리다보면 제일 마지막에 최대값이 올 것이고, 그럼 비교를 하지 않아도 된다. 또, 반복을 할 수록 비교해야하는 범위가 줄어들어 조건식은 numArr.length-1-i 이 된다.)
 그 다음 if문으로 numArr[j] 와 numArr[j+1]의 값을 비교하여 왼쪽의 값이 더 크면 temp를 이용해 서로 자리를 바꿔준다.
이렇게 계속 반복을 해주면 된다.

// --4
정렬이 완료 되었을때 if(!changed) break;를 만나서 for문을 빠져나온다.

// --5
정렬된 값을 출력한다.

 

 

결과 

6588247273

5682472738

5624727388

5246273788

2452637788

2425367788

2243567788

2234567788

 

 

728x90
반응형

'Programming > Java' 카테고리의 다른 글

[Java] String 배열  (0) 2021.02.27
[Java] 배열 - 값 카운트하기  (0) 2021.02.26
[Java] 배열 - 로또 번호 생성  (0) 2021.02.26
[Java] 배열 - 섞기  (0) 2021.02.26
[Java] 배열 - 최대값, 최소값 구하기  (0) 2021.02.24

댓글