Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. import time
  2. from random import *
  3.  
  4. def TestSort(sortedArray, initArray):
  5. if len(sortedArray)!=len(initArray):
  6. return False
  7. else:
  8. initArray.sort()
  9. for i in range(len(initArray)):
  10. if initArray[i]!=sortedArray[i]:
  11. return False
  12. return True
  13.  
  14.  
  15. def BubbleSort(array):
  16. if len(array)>5000:
  17. return "Prea multe numere => un timp foarte mare de executie"
  18. ok=True
  19. n=len(array)
  20. j=0
  21. while(ok==True and n>1):
  22. ok=False
  23. for i in range(len(array)-j-1):
  24. if array[i]>array[i+1]:
  25. array[i],array[i+1]=array[i+1],array[i]
  26. ok=True
  27. n-=1
  28. j+=1
  29. return array
  30.  
  31. def CountSort(array):
  32. if len(array)==0:
  33. return []
  34. valMax=max(array)
  35. if valMax>750000:
  36. return "Numere prea mari"
  37. countarray=[0]*(valMax+1)
  38. for i in array:
  39. countarray[i]+=1
  40. k=0
  41. for i in range(valMax+1):
  42. for j in range(countarray[i]):
  43. array[k]=i
  44. k+=1
  45. return array
  46.  
  47.  
  48.  
  49. def Interclasare(arrayst, arraydr):
  50. i=j=0
  51. list=[]
  52. while i<len(arrayst) and j<len(arraydr):
  53. if arrayst[i]<arraydr[j]:
  54. list.append(arrayst[i])
  55. i+=1
  56. else:
  57. list.append(arraydr[j])
  58. j+=1
  59. list.extend(arrayst[i:])
  60. list.extend(arraydr[j:])
  61. return list
  62.  
  63. def MergeSort(array):
  64. if len(array)<=1:
  65. return array
  66. else:
  67. arrayst=MergeSort(array[:len(array)//2])
  68. arraydr=MergeSort(array[len(array)//2:])
  69. return Interclasare(arrayst, arraydr)
  70.  
  71.  
  72.  
  73. def CountSortRadix(array,base,pos):
  74. countArray=[0]*base
  75. outputArray=[0]*len(array)
  76. for i in range(len(array)):
  77. countArray[array[i]//(base**pos)%base]+=1
  78. for i in range (1,base):
  79. countArray[i]=countArray[i]+countArray[i-1]
  80. for i in range(len(array)-1,-1,-1):
  81. outputArray[countArray[(array[i]//base**pos)%base]-1]=array[i]
  82. countArray[((array[i]//base**pos)%base)%base]-=1
  83. return outputArray
  84.  
  85. def RadixSort(array,base):
  86. if len(array)==0:
  87. return []
  88. valMax=max(array)
  89. poss=0
  90. while(valMax):
  91. valMax=valMax//base
  92. poss+=1
  93. for pos in range(poss):
  94. array=CountSortRadix(array,base,pos)
  95. return array
  96.  
  97. def median_of_medians(array):
  98. if len(array)<=5:
  99. return sorted(array)[len(array)//2]
  100. sublists=[sorted(array[i:i + 5]) for i in range(0, len(array), 5)]
  101. med=[s[len(s) // 2] for s in sublists]
  102. return median_of_medians(med)
  103.  
  104. def QuickSort(array):
  105. if len(array) == 0:
  106. return []
  107. if len(array) == 1:
  108. return array
  109. pivot = median_of_medians(array)
  110. arrayst = []
  111. arraydr = []
  112. arrayeq = []
  113. for i in array:
  114. if i < pivot:
  115. arrayst.append(i)
  116. elif i == pivot:
  117. arrayeq.append(i)
  118. else:
  119. arraydr.append(i)
  120. arrayst = QuickSort(arrayst)
  121. arraydr = QuickSort(arraydr)
  122. arrayst.extend(arrayeq)
  123. arrayst.extend(arraydr)
  124. return arrayst
  125.  
  126. sortari=[sorted, BubbleSort, CountSort, MergeSort, RadixSort, QuickSort]
  127.  
  128. Test=4
  129. while Test:
  130. print("Testul ", Test, ": \n")
  131. maxVal=0
  132. numbers=0
  133. if Test==4:
  134. maxVal=100000
  135. numbers=1
  136. if Test==3:
  137. maxVal=0
  138. numbers=0
  139. if Test==2:
  140. maxVal=100000000
  141. numbers=100000
  142. if Test==1:
  143. maxVal=10
  144. numbers=10
  145.  
  146. RandomArray=[randint(0,maxVal) for i in range(numbers)]
  147. Test-=1
  148. print("Valoarea maxima este " +str(maxVal))
  149. print("Lungimea RandomArray este " +str(numbers))
  150. print()
  151.  
  152. for Sort in sortari:
  153. print("Sortarea " + str(Sort) )
  154. NonSortedArray=RandomArray.copy()
  155. StartingTime=time.time()
  156. if Sort==RadixSort:
  157. x=input('Baza in care vom efectua Radix este ')
  158. Sort(RandomArray,int(x))
  159. else:
  160. Sort(RandomArray)
  161. FinishTime=time.time()
  162. if TestSort(RandomArray,NonSortedArray):
  163. print("Sortare efectuata cu succes in " + str(FinishTime-StartingTime) + " secunde ")
  164. print('\n')
  165. else:
  166. print("Fail")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement