Advertisement
Guest User

Untitled

a guest
May 29th, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. import random
  2.  
  3. def select_nth(n, items):
  4. pivot = random.choice(items)
  5.  
  6. lesser = [item for item in items if item < pivot]
  7. if len(lesser) > n:
  8. return select_nth(n, lesser)
  9. n -= len(lesser)
  10.  
  11. numequal = items.count(pivot)
  12. if numequal > n:
  13. return pivot
  14. n -= numequal
  15.  
  16. greater = [item for item in items if item > pivot]
  17. return select_nth(n, greater)
  18.  
  19.  
  20. def median(items):
  21. if len(items) % 2:
  22. return select_nth(len(items)//2, items)
  23.  
  24. else:
  25. left = select_nth((len(items)-1) // 2, items)
  26. right = select_nth((len(items)+1) // 2, items)
  27.  
  28. return (left + right) / 2
  29.  
  30. print (median([7,1,5,4,6,3,2]))
  31. print (median([1,4,2,3,6,5]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement