Algorithm ‐ Quick Sort - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 Quick Sort

public static void sortByQuickSort(int[] arr) {
    // 배열 전체 범위에 대한 퀵 정렬을 시작한다.
    quickSort(arr, 0, arr.length - 1);
}

public static void quickSort(int[] arr, int left, int right) {
    int part = partition(arr, left, right);

    // 처음 시작 인덱스가 분할 지점보다 작은 경우 재귀를 돌리기
    if (left < part - 1) {
        quickSort(arr, left, part - 1);
    }
   
    // 마지막 종료 인덱스가 분할 지점보다 큰 경우 재귀를 돌리기
    if (right > part) {
        quickSort(arr, part, right);
    }
}

public static int partition(int[] arr, int left, int right) {
    int pivot = arr[(left + right) / 2];
    while (left <= right) {
        
        // 왼쪽에서부터 피벗보다 큰 값을 찾는다.
        while (arr[left] < pivot) {
            left++;
        }

        // 오른쪽에서부터 피벗보다 작은 값을 찾는다.
        while (arr[right] > pivot) {
            right--;
        }

        // 역전되지 않았다면 Swap으로 값을 교체
        if (left <= right) {
            swap(arr, left, right);
            left++;
            right--;
        }
    }

    // 처음 시작 인덱스를 반환
    return left;
}
  • left : 부분 배열의 왼쪽 인덱스
  • right : 부분 배열의 오른쪽 인덱스
  • pivot : 피벗(여기선 중간 위치로 설정)