물에서 거품이 위로 올라가는 것처럼 큰 값이 뒤로 이동하는 방식이다. 그 다음에는 확정된 큰 값을 제외하고 나머지 중에서 큰값을 뒤로 보낸다.
def bubbleSort(arr):
for i in range(len(arr)):
for j in range(1, len(arr) - i):
if arr[j] < arr[j-1]:
arr[j-1], arr[j] = arr[j], arr[j-1]
return arr
print(bubbleSort([3, 2, 6, 8, 1]))
파이썬으로 작성하였다.
처음 반복할때는 n번 반복하여서 최대 값을 뒤로 보내었고 그 값을 제외한 배열의 크기가 점점 줄어드니 n + (n-1) + (n-2) + ... + 2 + 1 = n(n-1)/2라서 O(N^2)의 시간복잡도를 갖는다. 거품정렬은 정렬 여부는 따지지 않고 무조건 2가지 원소를 비교하는 방식이라서 최선, 평균, 최악의 시간복잡도가 O(N^2)으로 동일하다.
배열 내부에서 2가지의 원소를 비교, swap하는 방식이라서 공간 복잡도는 O(N)이다.