소개
- Pivot 기준으로 정렬을 진행한다.
- 앞서 배운 정렬들에 비해 빠른 속도를 가진다.
- 시간 복잡도는 평균적으로 O(nlogn) 을 가진다. 하지만 최악일 경우엔 O(n2) 을 가진다.
동작원리
- 배열 안에 기준이 될 원소를 선택 → Pivot
- Pivot을 기준으로 pivot 보다 작은 원소는 모두 왼쪽으로 옮기고 큰 원소는 모두 오른쪽으로 옮겨 분할 과정을 거친다.
- pivot 을 제외한 왼쪽 배열과 오른쪽 배열의 리스트를 정렬한다.
- 분할된 배열을 가지고 위의 순서를 더이상 분할이 안될 때 까지 반복한다.
구현코드
public static void sort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int pivot = arr[(left + right) / 2];
while (i < j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i >= j) {
break;
}
if (arr[i] == pivot && arr[j] == pivot) {
i++;
continue;
}
swap(arr, i, j);
}
sort(arr, left, i - 1);
sort(arr, i + 1, right);
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
'Algorithms' 카테고리의 다른 글
[Tree] 트리 (0) | 2022.07.10 |
---|---|
[Sort] 병합 정렬 (Merge Sort) (0) | 2022.06.26 |
[Sort] 셸 정렬 (Shell Sort) (0) | 2022.06.26 |
[Sort] 삽입 정렬 ( Insertion Sort) (0) | 2022.06.26 |
[Sort] 선택 정렬 (Selection Sort) (0) | 2022.06.26 |
[Sort] 버블 정렬 (Bubble Sort) (0) | 2022.06.26 |
[Sort] 선형 탐색 (Linear Search) (0) | 2022.06.26 |
[JAVA] 해싱 동작 방식 (0) | 2022.01.17 |