本文实例讲述了Python实现查找数组中任意第k大的数字算法。分享给大家供大家参考,具体如下:
模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候,在前半部分搜索。与快排不同的是,每次都减少了一半的排序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 ))
|
输出:返回了第五大排序的数字
[-1, 2, 3, 3, 5, 6, 7, 9]
6
希望本文所述对大家Python程序设计有所帮助。
原文链接:https://blog.csdn.net/weixin_36372879/article/details/84501054