본문으로 바로가기

안녕하세요~~~ 오늘은 자바로 버블정렬에 대해 알아보겠습니다.


버블정렬은 정렬중에 가장 기본적? 인 정렬 방법으로 정렬 대상의 n번째 인덱스와 n+1번째 인덱스를 비교하여 큰값을 뒤로 보내는 방법입니다.


그림설명을 보고나서 바로 코드를 보며 알아보겠습니다.




public class BubbleTest {
	public static void main(String[] args) {
		int[] a = {254,3,213,64,75,56,4,324,65,78,9,5,76,3410,8,342,76};
		int b;
		for(int i = 0 ; i < a.length ; i ++) {
			for(int j = 0 ; j < a.length -i -1 ; j ++) {
				if(a[j]>a[j+1]) {
					b = a[j];
					a[j] = a[j+1];
					a[j+1] = b;
				}
			}
		}
		
		for(int i = 0 ; i < a.length ; i ++) {
			System.out.println(a[i]);
		}
	}
}


for(int j = 0 ; j < a.length -i -1 ; j ++) // 부분에서 a.length-i-1 을 해주는 이유는 첫바퀴 검사에서 가장 큰값이 맨뒤로 가게 됩니다.


때문에 두번째바퀴에선 맨뒤로간 수는 비교를 하지않아도 되는데요.


이렇게 맨 뒷자리에 큰값이 쌓이게 되기때문에 for문이 돌때마다 비교횟수를 한번씩 줄여주면 더욱 효율적인 코드가 되겠지요.


오늘은 매우 간단한 버블정렬에대해 알아보았습니다.




댓글을 달아 주세요

  1. UD 2019.04.29 20:51

    for문을 두개 쓰면 보기 힘드니-_-..위에껀 while로 바꾸는건 어떨까요?
    private int[] bubble_sort(int[] list){
    int unsorted_until_index = list.length - 1;
    boolean sorted = false;
    int tempNum = 0;

    while(!sorted){
    sorted = true;
    for(int i = 0; i < unsorted_until_index; i++){
    if(list[i] > list[i + 1]){
    sorted = false;
    tempNum = list[i];
    list[i] = list[i + 1];
    list[i + 1] = tempNum;
    }
    }
    unsorted_until_index = unsorted_until_index - 1;
    }
    log.info("총 돌아간 회전수는 : {}" , unsorted_until_index);
    return list;
    }

  2. 신짱구발자 2020.07.24 19:26

    왜 첫 번째 for문에서 i 범위 잡아줄 때 i<arr.length인지 이해가 안되네요... arr.length-1까지 아닌가요?

  3. 제대로좀.. 2020.10.24 17:17

    님 소스 잘못된게 너무 많아요 다른 글들도...