[Algorithm] 버블 정렬 (bubble sort)
Posted: Updated:
버블 정렬(bubble sort)
- 인접한 두 값을 비교해 정렬되어 있지 않다면 값을 교환
- 오름차순으로 정렬할 경우
- 첫 번째 인덱스와 두 번째 인덱스 비교
- 첫 번째 인덱스 값이 두 번째 인덱스 값보다 클 경우 값을 교환
- 두 번째 인덱스 값이 첫 번째 인덱스 값보다 클 경우 교환하지 않음
- 두 번째 인덱스와 세 번째 인덱스 비교
- 두 번째 인덱스 값이 세 번째 인덱스 값보다 클 경우 값을 교환
- 세 번째 인덱스 값이 두 번째 인덱스 값보다 클 경우 교환하지 않음
- 총 배열의 길이 - 1 번 만큼 반복
- 마지막 인덱스에 제일 큰 값이 위치하게 됨
- 마지막 인덱스를 제외하고 나머지 배열 값끼리 위 과정 계속 반복
- 첫 번째 인덱스와 두 번째 인덱스 비교
- 내림차순으로 정렬할 경우
- 인접한 인덱스를 비교할 때 앞의 값이 뒤의 값보다 작을 경우 교환
예시: {5, 2, 4, 1, 3} 을 오름차순으로 정렬할 경우
- 1회 반복
- 0번 인덱스 값 5와 1번 인덱스 값 2를 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 5, 4, 1, 3}
- 1번 인덱스 값 5와 2번 인덱스 값 4를 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 4, 5, 1, 3}
- 2번 인덱스 값 5와 3번 인덱스 값 1을 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 4, 1, 5, 3}
- 3번 인덱스 값 5와 4번 인덱스 값 3을 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 4, 1, 3, 5}
- 총 4번 비교
- 배열 내에서 제일 큰 값인 5가 맨 마지막에 위치하게 됨
- 2회 반복
- 0번 인덱스 값 2와 1번 인덱스 값 4를 비교, 뒤의 값이 크므로 값 교환하지 않음
- 배열 상태: {2, 4, 1, 3, 5}
- 1번 인덱스 값 4와 2번 인덱스 값 1을 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 1, 4, 3, 5}
- 2번 인덱스 값 4와 3번 인덱스 값 3을 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {2, 1, 3, 4, 5}
- 총 3번 비교
- 정렬 완료된 인덱스를 제외하고 다음으로 큰 값인 4가 정렬됨
- 3회 반복
- 0번 인덱스 값 2와 1번 인덱스 값 1을 비교, 앞의 값이 크므로 값 교환
- 배열 상태: {1, 2, 3, 4, 5}
- 1번 인덱스 값 2와 2번 인덱스 값 3을 비교, 뒤의 값이 크므로 값 교환하지 않음
- 총 2번 비교
- 정렬 완료된 인덱스를 제외하고 다음으로 큰 값인 3가 정렬됨
- 4회 반복
- 0번 인덱스 값 1과 2번 인덱스 값 2를 비교, 뒤의 값이 크므로 값 교환하지 않음
- 배열 상태: {1, 2, 3, 4, 5}
- 총 1번 비교
- 정렬 완료
버블 정렬 자바 코드
public class Sort {
public void bubbleSort(int[] arr, int size) {
// 배열 크기 - 1 만큼 반복 실행
for (int i = 0; i < size - 1; i++) {
// 전체 한 반복 당 전체 배열 크기-1 에 i를 뺀 만큼 반복하며 비교
for (int j = 0; j < size - i - 1; j++) {
// j 번째 값이 다음 값보다 클 경우 값 교환
if (arr[j] > arr[j+1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
System.out.println((i+1)+"회 반복 중 "+ (j+1) + "번째 비교: " + Arrays.toString(arr));
}
}
}
}
public class Main {
public static void main(String[] args) {
Sort sort = new Sort();
int size = 5;
int[] arr = {5, 2, 4, 1, 3};
sort.bubbleSort(arr, size);
System.out.println("정렬된 배열: "+ Arrays.toString(arr));
}
}
출력
1회 반복 중 1번째 비교: [2, 5, 4, 1, 3]
1회 반복 중 2번째 비교: [2, 4, 5, 1, 3]
1회 반복 중 3번째 비교: [2, 4, 1, 5, 3]
1회 반복 중 4번째 비교: [2, 4, 1, 3, 5]
2회 반복 중 1번째 비교: [2, 4, 1, 3, 5]
2회 반복 중 2번째 비교: [2, 1, 4, 3, 5]
2회 반복 중 3번째 비교: [2, 1, 3, 4, 5]
3회 반복 중 1번째 비교: [1, 2, 3, 4, 5]
3회 반복 중 2번째 비교: [1, 2, 3, 4, 5]
4회 반복 중 1번째 비교: [1, 2, 3, 4, 5]
정렬된 배열: [1, 2, 3, 4, 5]
버블 정렬 시간 복잡도
외부 for문 n-1 번, 내부 for문 n-1-j 번 반복하므로 O(n²)
댓글남기기