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 |
댓글