public static void quickSort(int[] arr, int left, int right) {
if (left < right) { // 当数组只有一个元素时结束递归
int partitionIndex = partition(arr, left, right); // 对数组进行划分,获取基准元素位置
quickSort(arr, left, partitionIndex - 1); // 对左子数组递归执行快速排序
quickSort(arr, partitionIndex + 1, right); // 对右子数组递归执行快速排序
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left]; // 将数组的第一个元素设置为基准元素
int i = left; // 初始化左指针
int j = right; // 初始化右指针
while (i < j) { // 当左指针和右指针没有相遇时循环
while (i < j && arr[j] >= pivot) { // 右指针从右向左遍历,找到第一个小于基准元素的元素
j--;
}
if (i < j) { // 如果左指针和右指针没有相遇,将右指针所指的元素赋值给左指针所指的位置
arr[i] = arr[j];
i++;
}
while (i < j && arr[i] < pivot) { // 左指针从左向右遍历,找到第一个大于等于基准元素的元素
i++;
}
if (i < j) { // 如果左指针和右指针没有相遇,将左指针所指的元素赋值给右指针所指的位置
arr[j] = arr[i];
j--;
}
}
arr[i] = pivot; // 将基准元素放到最终位置
return i; // 返回基准元素的位置
}
Java 快速排序_快速排序java_大家都说我身材好的博客-CSDN博客