-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpython_2_1.py
More file actions
32 lines (27 loc) · 1.04 KB
/
python_2_1.py
File metadata and controls
32 lines (27 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def get_topK_minimum(data, k):
quick_select(data, k, 0, len(data) - 1)
return data[:k]
# 这里参考了快排的思路,目标就是找到符合条件的主元()
def quick_select(data, k, left, right):
if left >= right:
return
print('-----quick_select-----', left, right, data[left:right + 1])
i, j = left, right
pivot = data[right]
while i < j:
while i < j and data[i] <= pivot:
i += 1
if i < j:
data[i], data[j] = data[j], data[i]
print('swap ' + str(i) + '(' + str(data[i]) + ') and ' + str(j) + '(' + str(data[j]) + ') ' + str(data))
while i < j and data[j] >= pivot:
j -= 1
if i < j:
data[i], data[j] = data[j], data[i]
print('swap ' + str(i) + '(' + str(data[i]) + ') and ' + str(j) + '(' + str(data[j]) + ') ' + str(data))
if k <= i:
quick_select(data, k, left, i - 1)
else:
quick_select(data, k, i, right)
data = [10, 2, 56, 12, 89, 3, 4, 77]
print(get_topK_minimum(data, 3), data)