Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) 배열에 버블정렬 알고리즘 적용(코드)

Wesley & Harry 2022. 3. 6. 16:57
반응형

저번 포스팅에선 버블정렬 알고리즘의 과정및 결과를 알아보았습니다. 

이번엔 랜덤으로 배열을 생성하고, 그 값을 버블정렬 알고리즘을 코드에 적용해보고, 배열의 값 숫자세기를 해보도록 하겠습니다.

 

버블정렬 알고리즘의 과정을 모른다면 아래 포스팅을 참조해주세요.

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회전해 버블정렬을 마친모습입니다. 코드의 시점과 돌아가는 순서를 잘 익혀 해당코드를 설명할 수 있도록 해봅시다.

반응형