-
[자료구조] 정렬 #5 - 퀵정렬(Quick Sort)Study/자료구조 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); } }
출처
'Study > 자료구조' 카테고리의 다른 글
[자료구조] DFS/BFS (0) 2021.02.09 [자료구조] 정렬 #6 - 기수정렬(Radix Sort) (0) 2021.02.02 [자료구조] 정렬 #4 - 합병정렬 (Merge Sort) (0) 2021.02.02 [자료구조] 정렬 #3 - 삽입정렬(Insertion Sort) (0) 2021.02.02 [자료구조] 정렬 #2 - 선택정렬 (Selection Sort) (0) 2021.02.02