Python三路快排最后两个MLE?

P1923 【深基9.例4】求第 k 小的数

Disapole @ 2024-01-25 00:38:44

是python的问题还是代码的问题...?

from random import randint

# 在前后指针法的基础上,将数列分成大于、等于、小于三个部分
def quick_sort3(arr, s, l, r):
    if l >= r:
        return
    randindex = randint(l, r)
    arr[l], arr[randindex] = arr[randindex], arr[l] # 交换枢轴值与第一个数
    i, j = l, l + 1 
    k = r + 1
    while j < k:
        if arr[j] < arr[l]:
            i += 1
            arr[i], arr[j] = arr[j], arr[i]
            j += 1
        elif arr[j] > arr[l]:
            k -= 1
            arr[j], arr[k] = arr[k], arr[j]
        else:
            j += 1
    arr[l], arr[i] = arr[i], arr[l]
    if s < i:
        quick_sort3(arr, s, l, i - 1)
    elif s >= k:
        quick_sort3(arr, s, k, r)
    else:
        return

n,s = map(int, input().split())
nums = [int(_) for _ in input().split()]
quick_sort3(nums, s, 0, n-1)
print(nums[s])

by __ryp__ @ 2024-01-25 07:58:05

@Disapole 把 arr 做成全局的试试,Python 可能默认按值传参


by Disapole @ 2024-01-25 16:54:51

@intirain 不会啊,python对可变类型是传引用,不可变类型才是传值。 尽管如此还是试了,没有改变。


by westblot @ 2024-12-15 12:18:09

怀疑是py的问题,因为输入会让内存爆掉


|