Guest User

Untitled

a guest
Oct 24th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. import itertools
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. #%matplotlib inline
  5.  
  6. dec = {}
  7. dec[0] = []
  8. def quickSort(alist,times):
  9. comp = [0]
  10. quickSortHelper(alist,0,len(alist)-1,comp)
  11. times.append(comp[0])
  12.  
  13. def quickSortHelper(alist,first,last,comp):
  14. if first<last:
  15.  
  16. r = partition(alist,first,last)
  17. splitpoint = r[0]
  18. tmp = comp.pop()
  19. comp.append(tmp+r[1])
  20.  
  21. quickSortHelper(alist,first,splitpoint-1,comp)
  22. quickSortHelper(alist,splitpoint+1,last,comp)
  23.  
  24.  
  25. def partition(array,p,r):
  26. pivot = array[r]
  27. comp = 0
  28. i = p
  29. j = p
  30. while(j<r):
  31. dec[0].append(1)
  32. comp += 1
  33. if array[j]<=pivot:
  34. swap(array,i,j)
  35. i+=1
  36. j+=1
  37. swap(array,i,r)
  38. return i, comp
  39.  
  40.  
  41. def swap(array,i,j):
  42. tmp = array[i]
  43. array[i] = array[j]
  44. array[j] = tmp
  45.  
  46.  
  47.  
  48. def quickSortTimeDistrib(k):
  49.  
  50. # Create an array of n elements
  51. n=k
  52. x = []
  53. for i in range(1,n+1):
  54. x.append(n+1-i)
  55.  
  56. # Run quicksort for each permunation
  57. tlist =[]
  58. for p in itertools.permutations(x):
  59. quickSort(np.asarray(p),tlist)
  60.  
  61. print "n",n
  62. print "mean",np.mean(tlist)
  63. print "stdev",np.std(tlist)
  64. print "min",min(tlist)
  65. print "max",max(tlist)
  66. bins = []
  67.  
  68. for k in range(max(tlist)-min(tlist)+2):
  69. bins.append(min(tlist)-0.5+k)
  70.  
  71. plt.hist(tlist, bins)
  72. plt.title("Number of comparison of Quicksort for all permutaions")
  73. plt.xlabel("Comparisons of elements")
  74. plt.ylabel("Number of cases")
  75. plt.grid(True)
  76. plt.show()
  77.  
  78.  
  79. quickSortTimeDistrib(3)
  80. quickSortTimeDistrib(4)
  81. quickSortTimeDistrib(5)
Add Comment
Please, Sign In to add comment