이웃한 두 요소의 대소 관계를 비교하여 교환을 반복하는 정렬
원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.
5 > 4
이므로 둘의 순서를 변경한다.
7 > 4
이므로 둘의 순서를 변경한다.
6 > 4
이므로 둘의 순서를 변경한다.
2 < 4
이므로 순서를 변경하지 않는다.(회색으로 표시)
버블정렬 전체 과정 애니메이션이다.
public class BubbleSortTest {
// 자리이동
static void swap(int[] arr, int idx1, int idx2) {
int tmp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = tmp;
}
static void bubbleSort(int[] arr) {
// 수행하는 패스의 횟수는 (배열길이 - 1)회. 마지막 요소는 이미 끝에 놓이기 때문이다.
for(int i = 0; i < arr.length - 1; i++) {
// 끝에서 부터 비교하므로 j를 배열의 마지막으로 지정
// arr[j-1]과 arr[j]를 비교한다.
for(int j= arr.length - 1 ; j > i; j--) {
if(arr[j - 1] > arr[j]) {
// 자리이동
swap(arr, j -1, j);
}
}
}
}
public static void main(String[] args) {
int[] arr = {3, 1, 2, 6, 7 , 5, 4};
// 버블정렬
bubbleSort(arr);
// 결과 출력
System.out.println(Arrays.toString(arr));
}
}
장점
단점