Study/자료구조
[자료구조] 정렬 #5 - 퀵정렬(Quick Sort)
_gayeon
2021. 2. 2. 16:12
퀵정렬이란?
: devide and conquer 알고리즘 중 하나
- 평균적으로 매우 빠른 속도
- devide : pivot 중심으로 균등하게 분할
- conquer : 부분배열을 정렬
- combine : 정렬된 부분 배열들을 합병
시간복잡도
Best: 나누어지는 부분의 배열의 크기가 n/2인 경우 O(nlogn)
Worst: 이미 정렬되어있는 경우(리스트가 불균형하게 나누어지기 때문) O(n^2)
구현 (오름차순)
void parition(int a[], int left, int right){
int pivot = a[left];
int i = left+1;
int j = right;
while(i<j){
while(pivot < a[j])
j--;
while(pivot > a[i] && i<j)
i++;
swap(a,i,j);
}
a[left] = a[i];
a[i] = pivot;
return i;
}
void quickSort(int a[], int left, int right) {
if(left < right){
int pivotPos = partition(a, left, right); //분할(devide)
quickSort(a, left, pivotPos-1);
quickSort(a, pivotPos+1, right);
}
}
출처