알고리즘

버블정렬 Bubble Sorting

검정비니 2018. 7. 30. 17:13
728x90
반응형

버블정렬




버블정렬도 선택정렬처럼 제일 큰 원소를 끝자리로 옮기는 작업을 반복하는 정렬이다.


다만, 제일 큰 원소를 오른쪽으로 옮기는 방법이 다를 뿐이다.


bubbleSort(A[], n) {


for last (last의 값은 n에서부터 2까지) {


for i (i의 값은 1에서 last까지) {


if (A[i] > A[i+1]) then A[i] 와 A[i+1]의 값을 교환 (원소 교환)

}


}


}


위의 코드는 버블정렬의 수도 코드(sudo code)이다.


버블 정렬의 알고리즘은 크게 두 개의 for 루프로 이루어져 있다. 첫 번째 루프는 선택정렬의 for 루프와 역할이 똑같다. 루프를 돌 때마다 제일 큰 원소를 맨 오른쪽으로 보내고 정렬할 배열의 크기를 하나씩 줄인다. 안쪽의 for 루프가 하는 일은 가장 큰 원소를 맨 오른쪽으로 보내는 것이다. 이 부분이 선택정렬과 다르다. 선택정렬이 가장 큰 수를 찾은 다음 가장 오른쪽 수와 바꾸는 반면, 버블 정렬은 왼쪽부터 이웃한 수를 비교하면서 순서가 제대로 되어 있지 않으면 하나하나 바꾸어 나간다.



버블정렬의 시간 복잡도는 O(n^2)으로 선택정렬과 같다. 퀵정렬이나 병합정렬등 더욱 효율적인 정렬들이 많음에도 버블정렬이 사용되는 이유는 그 코드를 작성하기가 간편하기 때문이다.



아래의 이미지는 위키피디아에 올라와 있는 버블 정렬의 코드들이다.


1) sudo code




2) C 언어로 작성한 버블정렬




3) C++로 작성한 버블정렬



반응형

'알고리즘' 카테고리의 다른 글

logN의 시간 복잡도가 나오는 이유  (0) 2019.07.10
삽입정렬  (0) 2018.07.30
선택 정렬 (Selection Sort)  (0) 2018.06.25
마스터 정리  (0) 2018.06.25
점근적 표기  (0) 2018.06.25