인프런 - 강의/1 - 지구에서 제일 쉽게 설명한 자료구조 알고리즘

2-2 bubble sort 구현, big O

개복치 개발자 2019. 9. 13. 00:35

버블소트의 구현과, 빅오에 대해 알아보겠습니다.

 

아래와 같이 코드로 한번 구현해봤습니다.

 

얘의 출력 과정을 알아보면 아래와 같이 찍힙니다.

 

처음 버블 소트를 봤다면, 머리속에서 코드가 출력되는 부분이 시뮬레이션 잘 안될 수 있습니다.

 

아래의 출력물을 참고하시면 더 좋을 듯 합니다.

 

-----------
i = 0
j = 0
list[j] = 64    list[j+1] = 34
j = 1
list[j] = 64    list[j+1] = 25
j = 2
list[j] = 64    list[j+1] = 12
j = 3
list[j] = 64    list[j+1] = 22
j = 4
list[j] = 64    list[j+1] = 11
j = 5
list[j] = 64    list[j+1] = 90
-----------
i = 1
j = 0
list[j] = 34    list[j+1] = 25
j = 1
list[j] = 34    list[j+1] = 12
j = 2
list[j] = 34    list[j+1] = 22
j = 3
list[j] = 34    list[j+1] = 11
j = 4
list[j] = 34    list[j+1] = 64
-----------
i = 2
j = 0
list[j] = 25    list[j+1] = 12
j = 1
list[j] = 25    list[j+1] = 22
j = 2
list[j] = 25    list[j+1] = 11
j = 3
list[j] = 25    list[j+1] = 34
-----------
i = 3
j = 0
list[j] = 12    list[j+1] = 22
j = 1
list[j] = 22    list[j+1] = 11
j = 2
list[j] = 22    list[j+1] = 25
-----------
i = 4
j = 0
list[j] = 12    list[j+1] = 11
j = 1
list[j] = 12    list[j+1] = 22
-----------
i = 5
j = 0
list[j] = 11    list[j+1] = 12

 

여기까지 했으면, 버블소트가 이해되셨을 것이라 생각합니다.

 

시간 복잡도인 BIg-O는 반복문이 중첩으로 들어갔기 때문에 O(n^2)입니다.

 

n-1, n-2, … , 2, 1 번 = n(n-1)/2 = O(n^2)

 

이 것을 조금 다르게 구현할 수도 있는데 swapped라는 애를 만들어줍니다.

 

이 swapped 이라는 애를 통해, 정렬이 잘 되어 있으면 반복문을 그만 돌리도록 해줍니다.

 

자, bubbleSort2라는 애를 만들었는데 얘를 그냥 bubbleSort랑 비교해보겠습니다.

 

case1 - bubbleSort

 

list = [1, 2, 3, 5, 4, 8, 7]
bubbleSort(list)

 

 

 

case2 - bubbleSort2

 

list = [1, 2, 3, 5, 4, 8, 7]
bubbleSort2(list)

 

 

이렇게 확연히 실행이 줄어든 것을 볼 수 있습니다 :)