저번 포스팅에선 버블정렬 알고리즘의 과정및 결과를 알아보았습니다.
이번엔 랜덤으로 배열을 생성하고, 그 값을 버블정렬 알고리즘을 코드에 적용해보고, 배열의 값 숫자세기를 해보도록 하겠습니다.
버블정렬 알고리즘의 과정을 모른다면 아래 포스팅을 참조해주세요.
2022.03.06 - [IT Program/Java Basic] - 버블정렬 알고리즘(BubleSort) 과정 및 설명
버블정렬 알고리즘(BubleSort) 과정 및 설명
저번 포스팅엔 다차원 배열과 for문에 대해 배워보았습니다. 이번엔 배열을 이용해서 버블정렬 알고리즘(BubleSort) 을 알아보도록 하겠습니다. 간단하게 버블정렬에 대해서 알아보도록 하겠습니
dongwoonew.tistory.com
코드를 통해 알아보도록 하겠습니다.
package wesley.java.practice.basic;
public class arrayBubbleSort {
public static void main(String[] args) {
int[] wesleyArr = new int[10];
for (int i = 0; i < wesleyArr.length; i++) {
wesleyArr[i] = (int)(Math.random()*10);
System.out.print(wesleyArr[i]);
}
System.out.println();
for (int i = 0; i < wesleyArr.length-1; i++) {
boolean change = false;
for (int j = 0; j < wesleyArr.length-1-i; j++) {
if(wesleyArr[j] > wesleyArr[j+1]) {
int temp = wesleyArr[j];
wesleyArr[j] = wesleyArr[j+1];
wesleyArr[j+1] = temp;
change = true;
}//end if
}//end j for
if(!change) break;
for (int k = 0; k < wesleyArr.length; k++) {
System.out.print(wesleyArr[k]);
}
System.out.println();
}//end i for
}
}
현재 코드를 보면 매우 복잡해 보일 수 있습니다.
하지만 지금까지의 포스팅을 본다면 모두 이해가 가능할것입니다.
코드의 해설을 해보도록 하겠습니다.
int[] wesleyArr = new int[10];
wesleyArr라는 이름의 int값이 들어가는 10칸짜리 배열을 만듭니다.
for (int i = 0; i < wesleyArr.length; i++) {
wesleyArr[i] = (int)(Math.random()*10);
System.out.print(wesleyArr[i]);
}
for문을 통해 wesleyArr의 길이만큼 반복을 합니다.
wesleyArr[i]의 값에 랜덤숫자를 넣습니다.
값을 넣으면서 출력 까지 반복.
System.out.println();
띄어쓰기를 위해 간단하게 쓴 코드
for (int i = 0; i < wesleyArr.length-1; i++) {
boolean change = false;
for (int j = 0; j < wesleyArr.length-1-i; j++) {
if(wesleyArr[j] > wesleyArr[j+1]) {
int temp = wesleyArr[j];
wesleyArr[j] = wesleyArr[j+1];
wesleyArr[j+1] = temp;
change = true;
}//end if
}//end j for
if(!change) break;
for (int k = 0; k < wesleyArr.length; k++) {
System.out.print(wesleyArr[k]);
}
System.out.println();
}//end i for
버블정렬은 최대 n-1 만큼 돌 수 있다고 저번 게시물을 통해 알 수 있었습니다.
그렇기 때문에 반복문의 조건문을 wesleyArr.length-1을 이용하였습니다.
change란 변수는 자리바꿈이 일어나지 않았을 때를 위해 false로 선언을 해주었습니다.
j for문에 들어가게 되는데 for문에 if문을 넣어주게 됩니다.
if의 조건문 뜻은 wesleyArr[j]의 값이 wesleyArr[j+1]보다 클 때입니다.
해당 if문 안으로 들어가게되면 int temp가 보이는데 해당 값은 이전값을 저장하기 위한 변수입니다.
wesley[j]의 값을 우선 temp에 저장한뒤 wesley[j]의 값이 더 크기 때문에
자리를 바꿔주기 위해 wesley[j+1]의 값을 wesley[j]에 넣어주고
아까 바뀌기전 wesley[j]의 값을 저장했던 temp를 이용해 wesleyArr[j+1]에 넣어주는 과정을 거치게 됩니다.
자리바꿈이 일어났음을 알리는 change 변수의 boolean값을 true로 변경해줍니다.
if문을 벗어난 후 j++을 이용해 j for문을 조건에 맞지 않을때까지 반복합니다.
j for문을 벗어나게 되면 if(!change) break; 라는 구문이 있는데
자리바꿈이 일어나지 않을경우 반복문을 벗어나는 구문입니다.
for문을 통해 wesleyArr의 값을 출력해준 뒤 다시 i for문을
i 조건부에 맞고 if(!change) break;에 걸릴때까지
반복합니다.
아 그리고 j의 for문에 wesleyArr.length-1-i 를 해주는 이유는 이전 게시글에 있던것 처럼 마지막 값은 고정되고 비교대상에서 빠지기 때문에 for문을 비교할수록 비교범위가 줄어들기 때문에 범위를 이같이 정했습니다.
해당 코드의 결과값을 보게되면 앞선 포스팅에서 말했던 과정을 눈으로 볼 수 있습니다.
해당 결과값은 5262349099의 값을
7회전해 버블정렬을 마친모습입니다. 코드의 시점과 돌아가는 순서를 잘 익혀 해당코드를 설명할 수 있도록 해봅시다.
'IT Program > Java Basic' 카테고리의 다른 글
자바(java) 객체지향의 특징 & 클래스, 객체, 인스턴스 (0) | 2022.03.06 |
---|---|
이클립스 클래스(class)파일 보는법, 여는법 (Ctrl + 클릭)(에러 해결법) (0) | 2022.03.06 |
버블정렬 알고리즘(BubleSort) 과정 및 설명 (4) | 2022.03.06 |
자바(java) 다중배열(array), 이차원 배열 for문, 이차원 랜덤 배열 (2) | 2022.03.05 |
자바(java) for문으로 배열만들기 & 랜덤 배열 생성 & 증가하는 배열 생성 (0) | 2022.03.05 |