快速选择算法(quick select)
参考:https://mp.weixin.qq.com/s/TRO3FOKT90Mpvn3hQWVBAQ
# -*- coding:utf-8 -*-
class Solution:
def GetLeastNumbers_Solution(self, tinput, k):
# write code here
if k > len(tinput) or k <0:
return None
# k = len(tinput)-k
def partition(nums, lo, hi):
if lo >= hi:
return lo
i,j = lo+1, hi
p = lo
while True:
while(nums[i]<=nums[p]):
if i >= hi:
break
i += 1
while(nums[j]>=nums[p]):
if j <= lo:
break
j -= 1
if i >= j:
break
nums[i], nums[j] = nums[j], nums[i]
nums[p], nums[j] = nums[j], nums[p]
return j
lo, hi = 0, len(tinput)-1
while lo <= hi:
p = partition(tinput, lo, hi)
if p+1 == k:
return tinput[0:p+1]
elif p+1 < k:
lo = p+1
elif p+1 > k:
hi = p-1
return None



京公网安备 11010502036488号