입력 리스트 : (5, 3, 8, 4, 9, 1, 6, 2, 7)
1) 정렬할 레코드 중 피벗(pivot) 레코드를 선택
2) 정렬할 레코드들을 다시 정돈
- 피벗의 왼쪽 : 피벗의 키보다 작거나 같은 레코드들을 위치
- 피벗의 오른쪽 : 피벗의 키보다 크거나 같은 레코드들을 위치
3) 퀵 정렬을 순환적으로 사용
- 피벗의 왼쪽과 오른쪽의 레코드들은 서로 독립적으로 정렬
public class Main {
public static void main(String[] args) {
int[] data = {5, 3, 8, 4, 9, 1, 6, 2, 7};
sort(data, 0, data.length - 1);
System.out.println(Arrays.toString(data));
}
public static void sort(int[] data, int l, int r){
int left = l;
int right = r;
int pivot = data[(l+r)/2];
do{
while(data[left] < pivot) left++;
while(data[right] > pivot) right--;
if(left <= right){
int temp = data[left];
data[left] = data[right];
data[right] = temp;
left++;
right--;
}
}while (left <= right);
if(l < right) sort(data, l, right);
if(r > left) sort(data, left, r);
}
}
reference