快速排序是(挖坑法)是挖坑填数 + 分治来实现
// j负责找坑,i负责填坑(先找坑,再填坑,所以先让j左移,找出一个坑位)
// i一开始指向基准元素,有坑了i才会去填坑(右移),i填坑后仍指向一个小元素。
// j保证后面全是大元素,i保证前面全是小元素,j与i相遇在一个小元素(因为j先左移,所以j先到达相遇位置)。最后替换相遇位置元素和基准元素
private static void QuickSort(int[] num, int left, int right){
// 如果left=right,即数组中只剩一个元素时,直接返回
if (left >= right){
return;
}
// 设置最左边的元素为基准值
int key = num[left];
// 数组中比key小的放在左边,比key大的放在右边
int i = left;
int j = right;
while (i < j){
// j向左移动,直到碰到比key小的数
while (num[j] >= key && i<j){
j--;
}
// i向右移动,直到碰到比key大的数
while (num[i] <= key && i<j){
i++;
}
// i和j指向的元素交换
if (i < j){
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
num[left] = num[i];
num[i] = key;
QuickSort(num, left, i-1);
QuickSort(num, i+1, right);
}