public class QuickSortMain {
public static void main(String[] args) {
int[] nums = new int[]{7, 2, 7, 4, 7, 11, 8, 3, 7, 5, 1, 7, 7};
quickSort(nums, 0, nums.length - 1);
}
private static void quickSort(int[] nums, int start, int end) {
if (start < end) {
//因为返回的上回合基准值是已经放到正确的位置,所以不参与排序
int point = partition(nums, start, end);
quickSort(nums, start, point - 1);
quickSort(nums, point + 1, end);
}
}
/**
* 快排
* 基准是开头元素,所以从尾部开始
*
* @param nums 数组
* @param start 数组开始
* @param end 数组结束
* @return
*/
private static int partition(int[] nums, int start, int end) {
int point = nums[start];
int pivot = start;
while (start <= end) {
//过滤所有大于基准point的
while (nums[end] >= point && start < end) {
end--;
}
//过滤所有小于point基准的
while (nums[start] <= point && start < end) {
start++;
}
if (start >= end) {
break;
}
swap(nums, start, end);
}
//将开始的基准值放到中间,也就是每回合将基准值放到正确的位置
System.out.println("start:" + start + ",end:" + end);
swap(nums, pivot, start);
return start;
}
private static void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}