又叫线性选择算法,这是一种平均情况下时间复杂度为O(n)的快速选择算法,用到的是快速排序中的第一步,将第一个数作为中枢,使大于它的所有数放到它右边,小于它的所有数放到它左边。之后比较该中枢的最后位置i与k的大小,若i比k小,说明第k小的元素在i的右半段,之后对i的右半段进行快速选择;若i比k大,说明第k小的元素在i的左半段,之后对i的左半段进行快速选择;若i正好等于k,则直接返回......。
下面是具体的算法步骤:
1,选择中枢:如下,为了提高快速选择的效率,最好尽可能的选择数值居中的数作为中枢。如1 7 2 8 4 3,则取头尾以及中间位置,然后选择(1, 2, 3)中的2
int median3(int nums[], int left, int right){
int center = (left + right) / 2;
if(nums[left] > nums[center])
swap(nums[left], nums[center]);
if(nums[left] > nums[right])
swap(nums[left], nums[right]);
if(nums[center] > nums[right])
swap(nums[center], nums[right]);//此时nums[left] <= nums[center] <= nums[right]
swap(nums[center], nums[right-1]);//交换中枢和a[right-1],此时上面三个值的居中的数在下标right-1处,然后返回中枢,由于a[right]必定比中枢大,故只需对区间[le

本文介绍了一种平均时间复杂度为O(n)的快速选择算法——线性选择算法。通过详细解释算法步骤,包括选择中枢、一次快速排序及比较中枢位置与目标值,帮助读者理解并实现该算法。

5337

被折叠的 条评论
为什么被折叠?



