当前位置:首页python > 正文

Python要求O(n)复杂度求无序列表中第K的大元素实例

作者:野牛程序员:2023-12-14 17:51:45python阅读 2638

使用线性时间复杂度 O(n) 求解无序列表中第K大的元素的一种方法是使用快速选择算法,该算法是快速排序的变种。以下是一个 Python 实例代码:

import random

def partition(arr, low, high):
    pivot_index = random.randint(low, high)
    arr[pivot_index], arr[high] = arr[high], arr[pivot_index]
    pivot = arr[high]
    i = low - 1

    for j in range(low, high):
        if arr[j] <= pivot:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]

    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return i + 1

def kth_largest_element(arr, k):
    low, high = 0, len(arr) - 1
    while low <= high:
        pivot_index = partition(arr, low, high)
        if pivot_index == len(arr) - k:
            return arr[pivot_index]
        elif pivot_index < len(arr) - k:
            low = pivot_index + 1
        else:
            high = pivot_index - 1

# 示例用法
unsorted_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
k_value = 4
result = kth_largest_element(unsorted_list, k_value)
print(result)

这个算法的平均时间复杂度是 O(n),最坏情况下为 O(n^2)。然而,由于使用了随机化的划分点选择,通常情况下能够在 O(n) 时间内找到第K大的元素。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击