Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. def find_kthbest(k, data, left, right, statistics):
  2.     pivotindex = random.randint(left, right)
  3.  
  4.     # flytta pivot till kanten
  5.     data[pivotindex], data[right] = data[right], data[pivotindex]
  6.  
  7.     # damerna först med avseende på pivotdata
  8.     pivot = data[right]
  9.     pivotmid = partition(data, left, right, pivot, statistics)
  10.  
  11.     # flytta tillbaka pivot
  12.     data[pivotmid], pivot = pivot, data[pivotmid]
  13.  
  14.     statistics.nr_comparisons += 1
  15.     if pivotmid == k:
  16.         return data[pivotmid]
  17.     elif k < pivotmid:
  18.         return find_kthbest(k, data, left, pivotmid - 1, statistics)
  19.     else:
  20.         return find_kthbest(k, data, pivotmid + 1, right, statistics)
  21.  
  22.  
  23. def partition(data, left, right, pivot, statistics):
  24.     while True:
  25.         #left += 1 överflödig
  26.  
  27.         while data[left] > pivot:
  28.             statistics.nr_comparisons += 1
  29.             left += 1
  30.  
  31.         right -= 1    # hoppa över pivot
  32.  
  33.         while right != 0 and data[right] < pivot:
  34.             statistics.nr_comparisons += 1
  35.             right -= 1
  36.  
  37.         data[left], data[right] = data[right], data[left]
  38.  
  39.         statistics.nr_comparisons += 1
  40.         if left >= right:
  41.             break
  42.  
  43.     data[left], data[right] = data[right], data[left]       # Varför finns denna rad?
  44.  
  45.     return left
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement