본문 바로가기
공부/알고리즘

버블 정렬 복습(Bubble Sort)

by 맑은청이 2020. 5. 27.
728x90
반응형

오늘은 버블 정렬에 대해 배워 보았습니다. 분명 1,2 학년때 다 한건데 3학년이 된 지금에서야 다시 복습을 하는게 바보같다는 생각이 들 때도 있지만 지금이라도 열심히 해야지라는 생각이 듭니다. 

 

버블 정렬은 O(N^2) 인 세개의 정렬(선택,버블,삽입) 중에서도 가장 비효율적인 정렬입니다. 

 

버블정렬은 무조건 옆에 요소와 비교하고 교환합니다. 여기서 무조건 교환을 하기 때문에 알고리즘의 비효율적인 부분이 커집니다. 애를 들어 설명해보겠습니다.

 

 

3 1 4 5 2

 

라는 배열이 존재합니다.

 

첫번째

첫번째 3 을 옆에 요소 1과 비교 합니다. 1이 더 크기 때문에 교환합니다. 

 

1 3 4 5 2 

 

그리고 두번째 수 3을 다시 4와 비교한 후 크면 교환합니다. 여기선 4보다 작기 때문에 교환을 하지는 않습니다.

 

1 3 4 5 2

 

세번째 수를 5와 비교합니다. 또 변하진 않습니다. 

 

1 3 4 5 2 

 

그럼 4번째 수 5를 2와 다시 비교합니다. 

 

1 3 4 2 5

 

버블 정렬은 한번 정렬을 마치면 가장 마지막 원소가 가장 큰 수가 됩니다.  그래서 선택 정렬과는 다르게 2번째로 마지막 원소까지 정렬을 진행합니다. 

 

 

두번째 

1과 3을 비교합니다. 

 

1 3 4 2 5

 

3 과 4를 비교합니다. 

 

1 3 4 2 5 

 

4 과 2를 비교합니다.

 

1 3 2 4 5 

 

 

 

두번째 반복에서는 또다시 두번째로 큰 수인 4가 제자리를  찾아갑니다. 

 

 

세번째 

1과 3을 비교합니다. 

 

1 3 2 4 5

 

3 과 2를 비교합니다.

 

1 2 3 4 5 

 

세번째 반복에서는 또 다시 세번째로 큰 수인 3이 제자리를 찾아갑니다. 

 

이 예시에서는 정렬이 완료됐지만 실제로 컴퓨터에서는 계속 4번째 비교가 진행됩니다. 

4 + 3 + 2 +1 비교가 진행됐습니다. 

일반화하면 

 

(n-1)n/2 즉 O(N^2) 의 시간복잡도입니다. 

선택정렬과 시간복잡도는 동일하지만 가장 작은 수를 찾고 한번의 Swap을 진행하는 선택정렬과 달리 버블정렬은 매번 비교하고 Swap을 진행하기 때문에 수행시간에서 차이가 많이 납니다. 

 

 

c와 파이썬으로 구현을 해보았습니다.

 

버블정렬 C

 

 

버블정렬 파이썬

 

 

 

728x90
반응형

'공부 > 알고리즘' 카테고리의 다른 글

퀵정렬 복습  (0) 2020.05.28
삽입정렬 복습(Insertion Sort)  (0) 2020.05.27
선택정렬 복습  (0) 2020.05.26
탐욕 알고리즘(Greedy Algorithm)  (0) 2020.05.21
서로소 집합 데이터 구조_Abstract Data Type  (0) 2020.05.20