Advertisement
DimaT1

quickselect

Mar 16th, 2019
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.77 KB | None | 0 0
  1. from random import randint
  2.  
  3.  
  4. def quick_select(arr: list, k: int) -> int:
  5.     if k < 0:
  6.         raise IndexError("k is less than 0")
  7.  
  8.     if k > len(arr):
  9.         raise IndexError("k is more than number of elements in array")
  10.  
  11.     left = 0
  12.     right = len(arr) - 1
  13.     while True:
  14.         rnd = randint(left, right)
  15.         arr[rnd], arr[right] = arr[right], arr[rnd]
  16.  
  17.         x = arr[right]
  18.         i = left - 1
  19.         for j in range(left, right):
  20.             if arr[j] <= x:
  21.                 i += 1
  22.                 arr[i], arr[j] = arr[j], arr[i]
  23.         arr[i + 1], arr[right] = arr[right], arr[i + 1]
  24.         mid = i + 1
  25.  
  26.         if mid == k:
  27.             return arr[k]
  28.         elif k < mid:
  29.             right = mid
  30.         else:
  31.             left = mid + 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement