Loading

快速排序

快速排序是一种基于分治思想的排序算法,它的基本思想是:从数组中选择一个基准元素,将数组分为两个子数组,使得左边的子数组中的元素都小于等于基准元素,右边的子数组中的元素都大于等于基准元素,然后对两个子数组递归地进行快速排序,最后合并结果。

// 快速排序
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);
}
posted @ 2020-12-06 00:51  沿途有余弦  阅读(58)  评论(0)    收藏  举报