-
Notifications
You must be signed in to change notification settings - Fork 539
/
QuickSelect.py
29 lines (27 loc) · 975 Bytes
/
QuickSelect.py
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
def quickselect(array,startind,endind,position):
while True:
pivotind = startind
leftmark = startind + 1
rightmark = endind
while leftmark <= rightmark:
if array[leftmark] > array[pivotind] and array[rightmark] < array[pivotind]:
swap(leftmark,rightmark,array)
if array[leftmark] <= array[pivotind]:
leftmark += 1
if array[rightmark] >= array[pivotind]:
rightmark -=1
swap(pivotind, rightmark,array)
if rightmark == position:
print(array[rightmark])
return
elif rightmark < position :
startind = rightmark+1
else :
endind = rightmark - 1
def swap(one,two,array):
array[one],array[two]=array[two],array[one]
for _ in range(int(input())):
n = int(input())
arr = list(map(int,input().split()))
k = int(input())
quickselect(arr,0,n-1,k-1)