거품 정렬은 인접한 두 수를 비교하여 더 큰 수를 뒤로 보내는 간단한 정렬 알고리즘이다. 큰 그림으로 보면 뒤에서부터 앞으로 정렬해나가는 구조를 가지고 있다. 각 원소의 이동이 거품 방울이 수면으로 올라오는 듯한 모습을 보이기 때문에 거품 정렬이라는 이름을 가지게 되었다고 한다.
void bubbleSort(int[] arr) {
int temp = 0;
for(int i = 0; i < arr.length; i++) { // 1.
for(int j= 1 ; j < arr.length-i; j++) { // 2.
if(arr[j-1] > arr[j]) { // 3.
// swap(arr[j-1], arr[j])
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
버블 정렬은 정렬이 되어 있던 안되어있던 2개의 원소를 계속하여 비교하기에 최선, 평균, 최악의 경우 모두 시간 복잡도는 O(n^2)이다. (비교 연산의 횟수는 n(n - 1) / 2이다.)
주어진 배열 안에서 교환을 통해 정렬이 수행되고 추가적인 공간은 필요하지 않기 때문에 공간 복잡도는 O(n)이다.
https://github.com/GimunLee/tech-refrigerator/blob/master/Algorithm/%EA%B1%B0%ED%92%88%20%EC%A0%95%EB%A0%AC%20(Bubble%20Sort).md#%EA%B1%B0%ED%92%88-%EC%A0%95%EB%A0%AC-bubble-sort
https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html
https://steemit.com/kr-dev/@heejin/bubble-sort
https://www.daleseo.com/sort-bubble/
https://bowbowbow.tistory.com/10
https://st-lab.tistory.com/195
https://nyajjyang-portfolio.tistory.com/17