본문 바로가기
정렬

버블 정렬(Bubble Sort)

by seogenius 2021. 4. 2.

버블 정렬(Bubble Sort)

'인접'한 두개의 원소를 비교하여 자리를 교환하는 방식으로 정렬.

처음부터 마지막 원소까지 반복하면서 가장 큰 원소가 마지막으로 정렬된다.

평균 비교 횟수와 평균 자리 교환 횟수는 n(n-1)/2 이다.

따라서 시간 복잡도는 O(n^2)가 된다.

예시)

{57, 16, 41, 2, 50, 6}

1. 인접한 두 원소를 비교하여 자리를 교환하는 작업을 마지막 원소까지 반복하여 가장 큰 원소를 마지막 자리로 옮긴다.

{57, 16, 41, 2, 50, 6}

===>

{16, 57, 41, 2, 50, 6}

===>

{16, 41, 57, 2, 50, 6}

===>

{16, 41, 2, 57, 50, 6}

===>

{16, 41, 2, 50, 57, 6}

===>

{16, 41, 2, 50, 6, 57}

2. 위와 같은 작업을 마지막에서 두번째 원소까지 반복하여 다음으로 큰 원소를 옮긴다.

{16, 41, 2, 50, 6, 57}

===>

{16, 41, 2, 50, 6, 57}

===>

{16, 2, 41, 50, 6, 57}

===>

{16, 2, 41, 50, 6, 57}

===>

{16, 2, 41, 6, 50, 57}

3. 위와 같은 작업을 마지막에서 세번째 원소까지 반복하여 그 다음으로 큰 원소를 옮긴다.

{16, 2, 41, 6, 50, 57}

===>

{2, 16, 41, 6, 50, 57}

===>

{2, 16, 41, 6, 50, 57}

===>

{2, 16, 6, 41, 50, 57}

4. 위와 같은 작업을 마지막에서 네번째 원소까지 반복하여 그 다음으로 큰 원소를 옮긴다.

{2, 16, 6, 41, 50, 57}

===>

{2, 16, 6, 41, 50, 57}

===>

{2, 6, 16, 41, 50, 57}

5. 위와 같은 작업을 마지막에서 다섯번쨰 원소까지 반복하여 그 다음으로 큰 원소를 옮긴다.

{2, 6, 16, 41, 50, 57}

===>

{2, 6, 16, 41, 50, 57}

6. 마지막으로 남은 첫번째 원소는 가장 작은 원소이므로 종료한다.

{2, 6, 16, 41, 50, 57}

프로그램 작성)

package test;

class Sort {
	public void bubleSort(int[] a) {
		int i, j, size;
		
		size = a.length;
		
		for(i=size-1; i>0; i--) {
			for(j=0; j<i; j++) {
				if(a[j] > a[j+1]) {
					swap(a, j, j+1);
				}
			}
		}
		
	}
	
	public void swap(int[] a, int i, int j) {
		int temp = a[i];
		a[i] = a[j];
		a[j] = temp;
	}
}

public class Test {
	public static void main(String[] args) {
		int a[] = {57, 16, 41, 2, 50, 6};

		System.out.println("정렬 전 원소 : ");
		for(int i=0; i<a.length; i++) {
			System.out.printf(" %d", a[i]);
		}
		System.out.println();

		Sort s = new Sort();
		s.bubleSort(a);

		System.out.println("정렬 후 원소 : ");
		for(int i=0; i<a.length; i++) {
			System.out.printf(" %d", a[i]);
		}
	}
}

실행 결과)

'정렬' 카테고리의 다른 글

병합 정렬(Merge Sort)  (0) 2021.04.02
셸 정렬(Shell Sort)  (0) 2021.04.02
삽입 정렬(Insert Sort)  (0) 2021.04.02
퀵 정렬(Quick Sort)  (0) 2021.04.02
선택 정렬(Selection Sort)  (0) 2021.04.02