快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以通过分别对这两部分序列继续进行排序,以达到整个序列排序。

  1. 算法描述:
  1. 快速排序使用分治法来把一个串(list)分为两个子序列。具体如下:
  1. 从序列中挑出一个元素。称为“基准”(通常是选取序列第一个元素,然后以他内容为标准)
  2. 重新排序数列,所有比基准小的放到左边,比基准大的放到右边。(相同的随意)。然后在这个分区退出后,该基准就处于序列的中间位置。这称作分区。
  3. 然后递归的重复i~ii操作左右序列。
  1. 十大排序算法-------【快速排序】详解(Java源码)_递归

  2. 代码:
private static void kuaiSu(int[] intArray) {
kuaiSu2(intArray, 0, intArray.length - 1);
}

public static void kuaiSu2(int[] intArray, int start, int end) {
if (start >= end) {
return;
}

int index = fenqu(intArray, start, end);

kuaiSu2(intArray, start, index - 1);
kuaiSu2(intArray, index + 1, end);
}

public static int fenqu(int[] intArray, int start, int end) {
// 固定的切分方式
int key = intArray[start];
while (start < end) {
while (intArray[end] >= key && end > start) {// 从后半部分向前扫描
end--;
}
intArray[start] = intArray[end];
while (intArray[start] <= key && end > start) {
start++;
}

intArray[end] = intArray[start];
}
intArray[end] = key;
return end;
}