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 |