Python实现查找数组中任意第k大的数字算法示例-创新互联

本文实例讲述了Python实现查找数组中任意第k大的数字算法。分享给大家供大家参考,具体如下:

创新互联专注于临清网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供临清营销型网站建设,临清网站制作、临清网页设计、临清网站官网定制、微信小程序服务,打造临清网络公司原创品牌,更为您提供临清网站排名全网营销落地服务。

模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候,在前半部分搜索。与快排不同的是,每次都减少了一半的排序。

def partitionOfK(numbers, start, end, k):
  if k < 0 or numbers == [] or start < 0 or end >= len(numbers) or k > end:
    return None
  low = start
  high = end
  key = numbers[start]
  while low < high:
    while low < high and numbers[high] >= key:
      high -= 1
    numbers[low] = numbers[high]
    while low < high and numbers[low] <= key:
      low += 1
    numbers[high] = numbers[low]
  numbers[low] = key
  if low < k:
    return partitionOfK(numbers, start + 1, end, k)
  elif low > k:
    return partitionOfK(numbers, start, end - 1, k)
  else:
    return numbers[low]
numbers = [3,5,6,7,2,-1,9,3]
print(sorted(numbers))
print(partitionOfK(numbers, 0, len(numbers) - 1, 5))


名称栏目:Python实现查找数组中任意第k大的数字算法示例-创新互联
本文路径:http://hbruida.cn/article/dsddhi.html