文章目录
什么是快速选择算法?
快速排序的一种变形就是快速选择算法, 通常用来在未排序的数组中寻找第k小/第k大的元素。
快速选择的总体思路与快速排序相似,选择一个元素作为基准来对元素进行分区,将小于和大于基准的元素分在基准左边和右边的两个区域。不同的是,快速选择并不递归访问双边,而是只递归进入一边的元素中继续寻找。这降低了平均时间复杂度,从O(nlog n)至O(n),不过最坏情况仍然是 O ( n 2 ) O(n^2) O(n2)。
代码演示
求数组中的第K个最大元素
import java.util.Random;
public class QuickSelect {
int [] nums;
public void swap(int a, int b) {
int tmp = this.nums[a];
this.nums[a] = this.nums[b];
this.nums[b] = tmp;
}
public int par