알고리즘

Sorting Algorithm - 버블정렬 (bubble sort)

pogles 2023. 1. 13. 17:37

버블 정렬은 인접한 두 개의 원소를 비교해여 자리를 교환하는 방식이다.

 

첫번째 원소부터 시작해서 마지막 원소까지 서로 인접한 원소와 크기를 비교하여 자리를 교환한다.

 

버블정렬은 첫번째 원소부터 마지막 원소 까지 한 사이클을 진행하면 가장 큰값이 마지막 자리에 놓인다.

 


 

다음 배열을 버블정렬하면 다음과 같이 시각화 할 수 있다 (한 사이클)

96 35 1 58 2 19

1) 96과 35를 비교해서 96이 더 크므로 교환

35 96 1 58 2 19

 

2) 96과 1를 비교해서 96이 더 크므로 교환

35 1 96 58 2 19

 

3) 96과 58을 비교해서 96이 더 크므로 교환

35 1 58 96 2 19

 

3) 96과 2을 비교해서 96이 더 크므로 교환

35 1 58 2 96 19

 

3) 96과 19을 비교해서 96이 더 크므로 교환

35 1 58 2 19 96

 

 

한 사이클 종료 이후 다음 사이클에서는 96을 제외 (이미 가장 큰수로 정렬되었기 때문)

 

35 1 58 2 19

 


이를 코드로 구현하면 다음과 같다. 

int[] arr = {96, 35, 1, 58, 2, 18}

for (int i=0; i < arr.length; i++) {
    for (int j=0 < arr.length-i < j++) {
        int temp = arr[j+1];
        arr[j+i] = arr[j];
        arr[j] = temp;
    }
}

i = 0 일때

j = 0 ~ 4 까지 진행된다. 

swap(j, j+1)  >>  [0,1] [1,2] [2,3] [3.4] [4,5] 이 진행되어 마지막인 index 5 에 가장 큰 값인 96이 배치된다.

 

i = 1 일때

j = 0 ~ 3 까지 진행된다. ( i 가 1씩 커질수록 j 의 마지막 범위는 줄어든다)

swap(j, j+1)  >>  [0,1] [1,2] [2,3] [3.4] 이 진행되어 마지막인 index 4 에 그 다음 큰 값인 58이 배치된다.

 

i = 2 일때

j = 0 ~ 2 까지 진행된다. ( i 가 1씩 커질수록 j 의 마지막 범위는 줄어든다)

swap(j, j+1)  >>  [0,1] [1,2] [2,3] 이 진행되어 마지막인 index 3 에 그 다음 큰 값인 35이 배치된다.

 

i = 3 일때

j = 0 ~ 1 까지 진행된다. ( i 가 1씩 커질수록 j 의 마지막 범위는 줄어든다)

swap(j, j+1)  >>  [0,1] [1,2] 이 진행되어 마지막인 index 2 에 그 다음 큰 값인 18이 배치된다.

 

i = 4 일때

j = 0 이 진행된다. ( i 가 1씩 커질수록 j 의 마지막 범위는 줄어든다)

swap(j, j+1)  >>  [0,1] 이 진행되어 마지막인 index 1 에 그 다음 큰 값인 2이 배치된다.