Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.55 KB | None | 0 0
  1. def kthSmallest(arr, start, end, k):
  2.     if(k > 0 and k <= end - start + 1):
  3.         n = end - start + 1
  4.         median = []
  5.         i = 0
  6.         while(i < n // 5):
  7.             median.append(findMedian(arr, start + i * 5, 5))
  8.             i = i + 1
  9.  
  10.         if(i * 5 < n):
  11.             median.append(findMedian(arr, start + i * 5, n % 5))
  12.             i = i + 1
  13.  
  14.         if(i == 1):
  15.             medOfMed = median[i-1]
  16.         else:
  17.             medOfMed = kthSmallest(median, 0, i-1, i // 2)
  18.  
  19.         pos = partition(arr, start, end, medOfMed)
  20.  
  21.         if(pos - start == k - 1):
  22.             return arr[pos]
  23.         if(pos - start > k - 1):
  24.             return kthSmallest(arr, start, pos - 1, k)
  25.         return kthSmallest(arr, pos + 1, end, k - pos + start - 1)
  26.     return 0
  27.  
  28. def swap(arr, a, b):
  29.     temp = arr[a]
  30.     arr[a] = arr[b]
  31.     arr[b] = temp
  32.  
  33. def partition(arr, start, end, pivot):
  34.     for i in range(start, end):
  35.         if(arr[i] == pivot):
  36.             swap(arr, end, i)
  37.             break
  38.  
  39.     pivot = arr[end]
  40.     i = start
  41.     for j in range(start, end):
  42.         if(arr[j] <= pivot):
  43.             swap(arr, i, j)
  44.             i = i + 1
  45.     swap(arr, i, end)
  46.     return i
  47.  
  48. def findMedian(arr, start, n):
  49.     list = []
  50.     for i in range(start, start + n):
  51.         list.append(arr[i])
  52.  
  53.     list.sort()
  54.  
  55.     return list[n//2]
  56.  
  57. def test(k):
  58.     arr = [17, 4, 6, 3, 24, 28, 10]
  59.     n = len(arr)
  60.     print("Array:", arr)
  61.     print("K:", k)
  62.     print(k, "th smallest element:", kthSmallest(arr, 0, n - 1, k))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement