JAVA算法之快速排序
Posted JAVA笔试面试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA算法之快速排序相关的知识,希望对你有一定的参考价值。
主要思路
1.切分:将待排序数组,根据某种切分方式(就是选择一个基准数),将数组切分为两部分,使得前一部分都都小于等于基准数,后一部分都大于基准数。
2.递归:对1中分治出来的两部分分别进行分治。
代码实现
快速排序实现
//切分
public static int partition(int[] array, int low, int high) {
int key = array[low];
while (low < high) {
while (array[high] >= key && high > low) {// 从后半部分向前扫描
high--;
}
array[low] = array[high];
while (array[low] <= key && high > low) {// 从前半部分向后扫描
low++;
}
array[high] = array[low];
}
array[high] = key;
SorterUtil.print("排序之后", array);
return high;
}
//递归排序
public static void sort(int[] array, int low, int high) {
if (low >= high) {
return;
}
int index = partition(array, low, high);
sort(array, low, index - 1);
sort(array, index + 1, high);
}
切分方法
对于基准位置的选取一般有三种方法:固定切分,随机切分和三取样切分。固定切分的效率并不是太好,随机切分是常用的一种切分,效率比较高,对于三数取中选择基准点是最理想的一种。
三取样切分法
关于这一改进的最简单的描述大概是这样的:与一般的快速排序方法不同,它并不是选择待排数组的第一个数作为中轴,而是选用待排数组最左边、最右边和最中间的三个元素的中间值作为中轴。这一改进对于原来的快速排序算法来说,主要有两点优势:
(1) 首先,它使得最坏情况发生的几率减小了。
(2) 其次,未改进的快速排序算法为了防止比较时数组越界,在最后要设置一个哨点。
时间复杂度
完
以上是关于JAVA算法之快速排序的主要内容,如果未能解决你的问题,请参考以下文章