From 7ee7dcc793926570fcb4e7d1ee6c3116fcb98a1e Mon Sep 17 00:00:00 2001 From: Jayant Kumar Date: Fri, 2 Oct 2020 16:39:04 +0530 Subject: [PATCH] QuickSelect.py QuickSelect Algorithm To Search Efficiently kth element in an array without Sorting Whole Array In Some Cases You've to sort whole array and in the worst case If array already sorted . --- QuickSelect.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 QuickSelect.py diff --git a/QuickSelect.py b/QuickSelect.py new file mode 100644 index 0000000..9d8e189 --- /dev/null +++ b/QuickSelect.py @@ -0,0 +1,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)