快速排序
快速排序是一种基于分治思想的排序算法,它的基本思想是:从数组中选择一个基准元素,将数组分为两个子数组,使得左边的子数组中的元素都小于等于基准元素,右边的子数组中的元素都大于等于基准元素,然后对两个子数组递归地进行快速排序,最后合并结果。
// 快速排序
public static void quickSort(int[] arr, int low, int high) {
// 如果low >= high,说明已经排好序或者为空数组,直接返回
if (low >= high) {
return;
}
// 选择第一个元素作为基准
int pivot = arr[low];
// 定义两个指针i和j,分别从左右两端开始扫描
int i = low;
int j = high;
// 当i < j时,重复以下操作
while (i < j) {
// 先从右往左找到第一个小于等于基准的元素,并赋值给arr[i]
while (i < j && arr[j] > pivot) {
j--;
}
if (i < j) {
arr[i] = arr[j];
i++;
}
// 再从左往右找到第一个大于等于基准的元素,并赋值给arr[j]
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j] = arr[i];
j--;
}
}
// 此时i == j,将基准放到这个位置,并以此位置为界限划分两个子数组
arr[i] = pivot;
// 对左边的子数组进行快速排序
quickSort(arr, low, i - 1);
// 对右边的子数组进行快速排序
quickSort(arr, i + 1, high);
}

浙公网安备 33010602011771号