对于给定的数组,从中选一个元素为比较对象:
可以以左边第一个数作为目标数(每轮排序要确定一个目标数在数组中的最终位置),从右边最高位开始向后比较,直到出现目标数大于右边数情况,将目标数放入右边数位置,右边数放入低位数位置(low指向位置),然后从low++位置开始比较,直到出现左边数大于目标数情况,将目标数放入左边数位置,左边数放入目标数位置,如此循环,直到low和high相遇,该位置即为目标数的最终位置。继续寻找下一位,如此循环往复,直到所有数都找到对应位置
public class QuickSort {
public static void main (String[] args) {
int[] arr = {20, 18, 2,18};
qSort(arr, 0 , arr.length-1);
for(int i:arr){
System.out.print(i + " ");
}
}
public static void qSort (int[] arr, int l, int r) {
if (l == r) return;
int tmp = arr[l];//以左边第一个数为界
int left = l;
int right = r;
while (left < right){
while (right > left && arr[right] > tmp){
right--;
}
arr[left] = arr[right];
left++;
while(right > left && arr[left] < tmp) {
left++;
}
arr[right] = arr[left];
right--;
}
arr[left] = tmp;
left--;
right++;
if (l < left){
qSort(arr, l, left);
}
if (right < r){
qSort(arr, right, r);
}
}
}