首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

O(n)算法查找数字集合的中位数

要使用O(n)算法查找数字集合的中位数,您可以使用线性时间选择算法(Linear Time Selection Algorithm),也称为快速选择算法(Quickselect Algorithm)。以下是一个示例的快速选择算法实现:

代码语言:javascript
复制
def find_median(nums):
    n = len(nums)
    k = (n + 1) // 2  # 中位数的位置

    def partition(left, right):
        pivot = nums[right]  # 选择最右边的元素作为枢轴
        i = left - 1

        for j in range(left, right):
            if nums[j] <= pivot:
                i += 1
                nums[i], nums[j] = nums[j], nums[i]

        nums[i + 1], nums[right] = nums[right], nums[i + 1]
        return i + 1

    def quick_select(left, right):
        if left == right:
            return nums[left]

        pivot_index = partition(left, right)

        if k == pivot_index + 1:
            return nums[pivot_index]
        elif k < pivot_index + 1:
            return quick_select(left, pivot_index - 1)
        else:
            return quick_select(pivot_index + 1, right)

    return quick_select(0, n - 1)

在上面的示例中,find_median函数接受一个数字集合nums作为输入,并使用快速选择算法来查找中位数。算法的核心是通过选择枢轴元素将集合划分为两个部分,然后根据中位数的位置递归地在其中一个部分中继续查找,直到找到中位数。

要使用该算法,只需调用find_median函数并传入数字集合。它将返回集合的中位数。

请注意,快速选择算法的平均时间复杂度为O(n),但最坏情况下的时间复杂度为O(n^2)。然而,在实践中,它通常表现良好,并且在大多数情况下能够以线性时间找到中位数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

12分18秒

2.3.素性检验之埃氏筛sieve of eratosthenes

5分10秒

2.18.索洛瓦-施特拉森素性测试Solovay-Strassen primality test

5分12秒

2.7.素性检验之孙达拉姆筛sieve of sundaram

2分29秒

2.11.素性检验之区间分段筛segmented sieve

5分36秒

2.19.卢卡斯素性测试lucas primality test

5分18秒

2.13.费马素性检验fermat primality test

8分27秒

2.5.素性检验之阿特金筛sieve of atkin

7分18秒

1.6.线性打表求逆元

34分39秒

2.4.素性检验之欧拉筛sieve of euler

13分4秒

2.6.素性检验之普里查德筛sieve of pritchard

10分18秒

2.14.米勒拉宾素性检验Miller-Rabin primality test

5分8秒

084.go的map定义

领券