def quickselect(arr, k, l, r):
if r-l<=0:
return
=quickselect(arr, k, l, r)
pif k<p:
return quickselect(arr,k,l,p-1)
elif k>p:
return quickselect(arr,k,l+1,r)
else:
return arr[p]
1. quickselect
: Function
The quickselect
(& quicksort) uses the:
partition
algorithm- introduced in DSA 30: Quicksort [Part 1] post.
- to rearrange an array to be below and above a pivot
2. quickselect
: Instance Method within SortableArray
class
A SortableArray
class also previously introduced:
- introduced in DSA 30: Quicksort [Part 1] post.
class SortableArray():
def __init__(self, arr):
self.arr = arr
def partition(self, l: int, r: int):
=r
p=self.arr[p]
pivot-=1
rwhile True:
while self.arr[l]<pivot:
+=1
lwhile self.arr[r]>pivot:
-=1
rif l>=r:
break
else:
self.arr[l],self.arr[r]=self.arr[r],self.arr[l]
+=1
lself.arr[l],self.arr[p]=self.arr[p],self.arr[l]
return l
def quickselect(self, k, l, r):
if r-l<=0:
return self.arr[l]
= self.partition(l, r)
p
if k<p:
return self.quickselect(k,l,p-1)
elif k>p:
return self.quickselect(k,l+1,r)
else:
return self.arr[p]
3. Testing quickselect
Parameter | Values |
---|---|
input_array | 052163 |
sorted_array | 012356 |
indexes | 012345 |
k | index 5 of sorted input array |
Output | 6 |
= [int(char) for char in "052163"]
arr = SortableArray(arr)
sortable_arr 5,l=0,r=len(sortable_arr.arr)-1) sortable_arr.quickselect(
6