def quick_sort(nums, l, r, k):
if (l == r):
return nums[l]
x = nums[r]
i = l - 1
for j in range(l, r):
if nums[j] <= x:
i += 1
nums[i], nums[j] = nums[j], nums[i]
nums[i+1], nums[r] = nums[r], nums[i+1]
# i+1 是左右数组的分界点
if i+1 == k-1:
return nums[i+1]
elif i+1 > k-1: # 第 k 个数在左半边
return quick_sort(nums, l, i, k)
else:
return quick_sort(nums, i+2, r, k)
if __name__ == "__main__":
n, k = map(int, input().split())
nums = list(map(int, input().split()))
print(quick_sort(nums, 0, n-1, k))
注意:
这里与yxc大佬的思路不同,这里找到是索引,所以我只要找到分界点的索引位置为 k-1 即可,所以递归右边的参数也为 k