카테고리 없음

버블정렬

머룽 2023. 4. 18. 12:31

버블정렬

  • 거품 정렬(Bubble sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O(n^2)로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다.

6 2 7 8 1

  • 6보다 2이 작기 때문에 교환

2 6 7 8 1

  • 6보다 7이 크기 때문에 교환 하지 않는다.

2 6 7 8 1

  • 7보다 8이 크기 때문에 교환 하지 않는다.

2 6 7 8 1

  • 8보다 1이 작기 때문에 교환

2 6 7 1 8

  • 다시 처음으로 돌아가 반복 한다.
private static void bubbleSort(int[] arr){
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

조금 나은 버블정렬

버블 정렬은 각각 한번씩 i랑 i+1 을 비교하므로 만약 한번도 교환이 일어 나지 않았다면 정렬이 된 상태다. 그걸 이용해서 조금 더 나은 버블정렬을 구현할 수 있다.
private static void bubbleSort(int[] arr){
    for (int i = 0; i < arr.length; i++) {
        boolean checked = false;
        for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                checked = true;
            }
        }
        if(!checked){
            break;
        }
    }
}