python实现快速选择算法

参考资料

https://www.bilibili.com/video/BV15Z4y1p7KR/?spm_id_from=333.337.search-card.all.click&vd_source=3f409e335d99edd58fc22f4c59f6ae9e

代码实现

import random

# 根据快排算法改进的快速选择算法
def quickselect(mylist, k):
    randomIndex = random.randint(0, len(mylist) - 1)
    print(f"randomIndex:{randomIndex}")
    pivot = mylist[randomIndex]
    print(f"pivot:{pivot}")
    left = []
    right = []
    mid = []
    for i in mylist:
        if i < pivot:
            left.append(i)
        elif i > pivot:
            right.append(i)
        elif i == pivot:
            mid.append(i)

    if len(right) >= k:
        pivot = quickselect(right, k)

    elif len(right) + len(mid) < k:
        pivot = quickselect(left, k - len(right) - len(mid))

    return pivot


input_list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
print(f"input_list:{input_list}")
number_k_value = quickselect(mylist=input_list, k=1)
print(f"number_k_value:{number_k_value}")

image

posted @ 2022-11-20 21:33  JaxonYe  阅读(142)  评论(0编辑  收藏  举报