十大排序算法-------【快速排序】详解(Java源码)
快速排序的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以通过分别对这两部分序列继续进行排序,以达到整个序列排序。
- 算法描述:
- 快速排序使用分治法来把一个串(list)分为两个子序列。具体如下:
- 从序列中挑出一个元素。称为“基准”(通常是选取序列第一个元素,然后以他内容为标准)
- 重新排序数列,所有比基准小的放到左边,比基准大的放到右边。(相同的随意)。然后在这个分区退出后,该基准就处于序列的中间位置。这称作分区。
- 然后递归的重复i~ii操作左右序列。
- 快速排序使用分治法来把一个串(list)分为两个子序列。具体如下:
- 代码:
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;
}