繁体   English   中英

quickselect算法的时间复杂度

[英]Time complexity of quickselect algorithm

我不确定 Quickselect 算法(对于第 k 个最大元素)的时间复杂度是多少,所以任何人都可以帮助我

def swap(arr,i,j):
    temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp

def partition(arr,left,right,p_index):
    pivot = arr[p_index]
    i = left-1

    for j in range(left,right):
        if arr[j] >= pivot:
            i += 1
            swap(arr,i,j)
    swap(arr,i+1,p_index)
    return i+1


def quickselect(arr,left,right,k):
    if left == right:
        return arr[left]

    p_index = right
    p_index = partition(arr,left,right,p_index)

    if p_index == k:
        return arr[p_index]
    elif p_index > k:
        return quickselect(arr,left,p_index-1,k)
    else:
        return quickselect(arr,p_index+1,right,k)

平均时间复杂度从 O(n log(n)) 降低到 O(n),但最坏情况仍为 O(n^2)。

https://en.wikipedia.org/wiki/Quickselect

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM