퀵소트는 최악의 경우 O(N^2), 평균적으로 O(NlogN)의 시간복잡도를 가집니다.
또한 퀵소트는 불안정 정렬로 분류됩니다.
퀵소트에는 피벗이라는 개념이 있습니다. 피벗을 선택하는 방법은 첫번째요소, 중간요소, 마지막요소, 랜덤요소를 선택하는 등 여러가지 방식이 있습니다. 그리고 피벗을 어떻게 선택하느냐에 따라 처리속도가 상이할 수 있죠.
public class QuickSort {
public static void main(String[] args) {
int[] arr= {3,2,1,4,5,6,7,-1,-2};
callQuickSort(arr);
for(int x : arr){
System.out.print(x+" ");
}
System.out.println();
}
public static void callQuickSort(int[] arr){
quickSort(arr, 0, arr.length-1);
}
public static void quickSort(int[] arr, int start, int end){
int part2 = Partition(arr, start, end);
if(start<part2-1){
quickSort(arr, start, part2-1);
}
if(part2<end){
quickSort(arr,part2,end);
}
}
public static int Partition(int[] arr, int start, int end){
int pivot = arr[(start+end)/2];
while(start<=end){
while(arr[start]<pivot) start++;
while(arr[end]>pivot) end--;
if(start<=end){
swap(arr,start,end);
start++;
end--;
}
}
return start;
}
public static void swap(int[] arr, int a, int b){
int tmp = arr[a];
arr[a]=arr[b];
arr[b]=tmp;
}
}