버블소트의 구현과, 빅오에 대해 알아보겠습니다.
아래와 같이 코드로 한번 구현해봤습니다.
얘의 출력 과정을 알아보면 아래와 같이 찍힙니다.
처음 버블 소트를 봤다면, 머리속에서 코드가 출력되는 부분이 시뮬레이션 잘 안될 수 있습니다.
아래의 출력물을 참고하시면 더 좋을 듯 합니다.
-----------
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)
이렇게 확연히 실행이 줄어든 것을 볼 수 있습니다 :)
'인프런 - 강의 > 1 - 지구에서 제일 쉽게 설명한 자료구조 알고리즘' 카테고리의 다른 글
3-2 Insert Sort 구현, Big-O (0) | 2019.09.13 |
---|---|
3-1 InsertSort 삽입정렬 원리 (0) | 2019.09.13 |
2-1 bubble sort 원리 (0) | 2019.09.12 |
1-3 빅오표현법 Big - O notation (0) | 2019.09.12 |
1-2 자료구조와, 알고리즘은 무엇인가? (0) | 2019.09.12 |