본문 바로가기
코딩테스트/분할 정복

Quick sort

by Luigi.yoon 2023. 8. 1.

 

 

public static void main(String[] args) {
    int[] src = new int[]{1, 9, 8, 5, 4, 2, 3, 7, 6};
    printArray(src);
    midPivotSort(src, 0, src.length-1);
    printArray(src);
}

private static void midPivotSort(int[] src, int start, int end) {
    if(start >= end) return;

    int part = partition(src, start, end);
    if(start < part-1) midPivotSort(src, start, part-1);
    if(part < end) midPivotSort(src, part, end);
}

private static int partition(int[] src, int start, int end) {
    int pivot = src[(start + end) / 2];
    while(start <= end) {
        while(src[start] < pivot) start++;
        while(src[end] > pivot) end--;
        if(start <= end) {
            swap(src, start++, end--);
        }
    }

    return start;
}

private static void swap(int[] src, int x, int y) {
    int tmp = src[x];
    src[x] = src[y];
    src[y] = tmp;
}

public static void printArray(int[] a) {
    for (int i=0;i<a.length;i++)
        System.out.print(a[i]+" ");
    System.out.println();
}

 

 

'코딩테스트 > 분할 정복' 카테고리의 다른 글

쿼드 트리 압축하기  (0) 2023.08.07
쿼드 트리 뒤집기 (문제 ID: QUADTREE, 난이도: 하)  (0) 2023.08.03
Merge sort  (0) 2023.08.01