Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. def dual_pivot_randomized_quicksort(arr):
  2. start_time=time.time()
  3. lo=0
  4. hi=len(arr)-1
  5. dual_quicksort(arr,lo,hi)
  6. return time.time()-start_time
  7.  
  8.  
  9. def dual_quicksort(arr,lo,hi):
  10. if(lo<hi):
  11. p1,p2=dual_randomized_partition(arr,lo,hi)
  12. dual_quicksort(arr,lo,p1-1)
  13. dual_quicksort(arr,p1+1,p2-1)
  14. dual_quicksort(arr,p2+1,hi)
  15.  
  16. def dual_randomized_partition(arr,lo,hi):
  17. if(lo>=hi):
  18. return
  19. pivot1=random.randint(lo,hi)
  20. pivot2=random.randint(lo,hi)
  21. while(pivot1==pivot2):
  22. pivot1=random.randint(lo,hi)
  23. if(pivot1>pivot2):
  24. pivot1,pivot2=pivot2,pivot1
  25.  
  26. pivot1_value=arr[pivot1]
  27. pivot2_value=arr[pivot2]
  28.  
  29. if(pivot1_value>pivot2_value):
  30. arr[pivot1],arr[pivot2]=arr[pivot2],arr[pivot1]
  31. pivot1_value=arr[pivot1]
  32. pivot2_value=arr[pivot2]
  33.  
  34. arr[pivot1],arr[lo]=arr[lo],arr[pivot1]
  35. arr[pivot2],arr[hi]=arr[hi],arr[pivot2]
  36.  
  37. l=lo+1
  38. g=hi-1
  39. k=l
  40. p=arr[lo]
  41. q=arr[hi]
  42.  
  43. if(p>q):
  44. arr[lo],arr[hi]=arr[hi],arr[lo]
  45. p=arr[lo]
  46. q=arr[hi]
  47.  
  48. while(k<=g):
  49. if arr[k]< p:
  50. arr[k],arr[l]=arr[l],arr[k]
  51. l+=1
  52. elif(arr[k]>=q):
  53. while(arr[g] > q and k<g):
  54. g-=1
  55. arr[k],arr[g]=arr[g],arr[k]
  56. g-=1
  57. if(arr[k]<p):
  58. arr[k],arr[l]=arr[l],arr[k]
  59. l+=1
  60. k+=1
  61.  
  62. l-=1
  63. g+=1
  64. arr[l],arr[lo]=arr[lo],arr[l]
  65. arr[g],arr[hi]=arr[hi],arr[g]
  66. return (l,g)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement