public class QuickSort {
public static void main(String[] args) {
int[] nums = {7, 4, 6, 5, 8, 1, 3};
System.out.println(arrayToString(nums));
sort(nums, 0, nums.length - 1);
System.out.println(arrayToString(nums));
}
public static String arrayToString(int[] nums) {
String str = "";
for (int num : nums) {
str += num + " ";
}
return str;
}
public static void sort(int[] nums, int starts, int ends) {
if (starts > ends) {
return;
}
int base = nums[starts]; // 把第一个数当作基准数
int i = starts;
int j = ends;
while (i < j) {
// 将基准值与右侧数值做比较,查找比base小的数值,获取下标 j, j 从右向左移动
while (base <= nums[j] && i < j) {
j--;
}
System.out.println("j = " + j);
// 将基准值与左侧数值做比较,查找比base大的数值,获取下标 i, i 从左向右移动
while (base >= nums[i] && i < j) {
i++;
}
System.out.println("i = " + i);
// 交换 i 和 j 的值
if (i < j) {
System.out.println("交换" + nums[i] + "和" + nums[j]);
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
// 完成循环后将base值放到中间位置
System.out.println("+++" + arrayToString(nums));
nums[starts] = nums[i];
nums[i] = base;
sort(nums, starts, i-1);
sort(nums, j+1, ends);
}
}