Home

Published

- 2 min read

[ Algorithm ] Quick Sort(퀵 정렬)

img of [ Algorithm ] Quick Sort(퀵 정렬)

Quick Sort

  • 실무에서 가장 많이 사용하는 정렬
    • 일반적 / 범용적으로 가장 빠름
  • 진정한 분할 정복 알고리즘
    • 모든 요소를 방문함(decrease - and-counquer와의 차이)
    • 복잡도에 log가 있다는 것에서 알 수 있음
  • 어떤 값(pivot)을 기준으로 목록을 하위 목록으로 2개로 나눔
    • 목록을 나누는 기준은 pivot보다 작냐/크냐
    • 이 과정을 재귀적으로 반복
    • 재귀 단계가 깊어질 때마다 새로운 pivot 값을 뽑음
  • pivot과 교환이 동일하지 않게 이동, 인덱스도 생각해야 해서 복잡하게 느껴질 수 있음
  • 평균 수행 시간: O(NlogN)
  • 최악 수행 시간: O(N^2)
  • 메모리(공간 복잡도): O(logN)
  • 안정성: X
   public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(arr, low, high);
            quickSort(arr, low, pivotIndex - 1);
            quickSort(arr, pivotIndex + 1, high);
        }
    }

    private static int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = low - 1;

        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                swap(arr, i, j);
            }
        }

        swap(arr, i + 1, high);
        return i + 1;
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}