특징
- 임의의 기준 값(pivot)을 정하고 그 값을 기준으로 좌우로 분할하며 정렬하는 방식
- O(n^2) - pivot이 최소값 또는 최대값으로 지정되는 최악의 경우
- pivot 정하는 방법
1) 중간에 있는 값
2) 왼쪽 끝에 값
3) 오른쪽 끝에 값
4) 위에 3개 값을 뽑은 후 크기가 중간인 값
정렬 과정
- 왼쪽 i는 pivot보다 큰 값을 찾고, 오른쪽 j는 pivot보다 작은 값을 찾는다
- i와 j가 만나면 종료하고, 그 만난 위치의 값과 pivot값을 교체한다.

- 교체된 이전의 pivot값을 고정해놓고, 그 값을 기준으로 나눠서 다시 이전의 과정을 반복한다

소스코드
import java.util.Arrays;
public class Main3 {
public static void quickSort(int[] arr, int left, int right) {
if(left >= right) {
return;
}
int pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left];
int i = left;
int j = right;
while(i < j) {
while (arr[j] > pivot && i < j) {
j--;
}
while(arr[i] <= pivot && i < j) {
i++;
}
swap(arr, i, j);
}
swap(arr, left, i);
return i;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {6, 2, 7, 9, 4, 5, 8};
quickSort(arr, 0, arr.length - 1);
System.out.println("퀵 정렬: " + Arrays.toString(arr));
}
}