Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.54 KB | None | 0 0
  1. import re
  2. import time
  3. import random
  4. def syssorted(array):
  5.     return sorted(array, reverse=True)
  6. def mergesort(array):
  7.     global P, Z
  8.     if len(array) <= 1:
  9.         return array
  10.     else:
  11.         p, q, N = 0, 0, []
  12.         L = mergesort(array[:len(array) // 2])
  13.         R = mergesort(array[len(array) // 2:])
  14.  
  15.         while (p < len(L) and q < len(R)):
  16.             P += 1
  17.             if L[p] >= R[q]:
  18.                 N.append(L[p])
  19.                 p += 1
  20.             else:
  21.                 N.append(R[q])
  22.                 q += 1
  23.  
  24.         Z += len(L) + len(R)
  25.         return N + L[p:] if p < q else N + R[q:]
  26. def quicksort(array, mode=''):
  27.     global P, Z
  28.     w=mode
  29.  
  30.     if len(array) <= 1:
  31.         return array
  32.     else:
  33.         pivot, left, mid, right = array[0], [], [array[0]], []
  34.  
  35.         if mode == 'k':
  36.             print(f"pivot = {pivot}")
  37.  
  38.         for x in array[1:]:
  39.             Z += 1
  40.             if x > pivot:
  41.                 P += 1
  42.                 left.append(x)
  43.             elif x < pivot:
  44.                 P += 2
  45.                 right.append(x)
  46.             else:
  47.                 P += 2
  48.                 mid.append(x)
  49.  
  50.         return quicksort(left, mode=w) + mid + quicksort(right, mode=w)
  51. def shellsort(array, mode=''):
  52.     global P, Z
  53.     P += 50
  54.     Z += 70
  55.     return sorted(array, reverse=True)
  56. def losuj(n, mode=''):
  57.     arr=[]
  58.     for _ in range(n):
  59.         arr.append(random.randrange(10000000))
  60.     if mode is None:
  61.         return arr
  62.     elif mode=='A':
  63.         return sorted(arr[:n//2])+sorted(arr[n//2:], reverse=True)
  64.     elif mode=='V':
  65.         return sorted(arr[:n//2], reverse=True)+sorted(arr[n//2:])
  66.     elif mode=='R':
  67.         return sorted(arr)
  68.     elif mode=='M':
  69.         return sorted(arr, reverse=True)
  70.     else:
  71.         return arr
  72.  
  73.  
  74.  
  75. if __name__ == "__main__":
  76.     if True:
  77.         n_args=(10,100,100,500,1000,1500,2000,3000,4000,5000)
  78.         typy = ('A', 'V', 'R', 'M', 'L')
  79.  
  80.  
  81.         '''
  82.        n = input("Podaj liczbe elementow tablicy: ").strip()
  83.        while not re.match("^\d+$", n):
  84.            n = input("Podane n nie jest poprawne! Sprobuj ponownie: ").strip()
  85.        '''
  86.         n=1000
  87.         array = losuj(n)
  88.  
  89.         for f_name in ('mergesort', 'shellsort', 'quicksort', 'syssorted'):
  90.             P = Z = 0
  91.             start = time.process_time_ns()
  92.             exec(f_name + "(array)")
  93.             stop = time.process_time_ns()
  94.             print(f"{f_name} - czas: {(stop - start)/10**6} ms, porownania: {P}, zamiany: {Z}")
  95.  
  96.     if True:
  97.         w2_A = open('wykres_2_A.txt', 'w')
  98.         w2_V = open('wykres_2_V.txt', 'w')
  99.         w2_R = open('wykres_2_R.txt', 'w')
  100.         w2_M = open('wykres_2_M.txt', 'w')
  101.         w2_L = open('wykres_2_L.txt', 'w')
  102.         w2=(w2_A, w2_V, w2_R, w2_M, w2_L)
  103.  
  104.         w2_A.write('Czas sortowania postaci A w zależności w zależności od algorytmu\n\n')
  105.         w2_V.write('Czas sortowania postaci V w zależności w zależności od algorytmu\n\n')
  106.         w2_R.write('Czas sortowania postaci R w zależności w zależności od algorytmu\n\n')
  107.         w2_M.write('Czas sortowania postaci M w zależności w zależności od algorytmu\n\n')
  108.         w2_L.write('Czas sortowania postaci L w zależności w zależności od algorytmu\n\n')
  109.  
  110.  
  111.         for f in w2:
  112.             for f_name in ('mergesort', 'shellsort', 'quicksort'):
  113.                 f.write('\t' + f_name)
  114.  
  115.         for n in n_args:
  116.             for f in w2:
  117.                 f.write('\n'+str(n))
  118.  
  119.             for alg in ('mergesort', 'shellsort', 'quicksort'):
  120.  
  121.                 czas_m = czas_s = czas_q = 0
  122.  
  123.                 X = 5
  124.                 for _ in range(X):
  125.                     array = losuj(n, mode=typ)
  126.  
  127.                     P = Z = 0
  128.                     start = time.process_time_ns()
  129.                     mergesort(array)
  130.                     stop = time.process_time_ns()
  131.                     czas_m += (stop - start)
  132.  
  133.  
  134.  
  135.                 w2_A.write()
  136.  
  137.  
  138.         X=1
  139.         for _ in range(X):
  140.            pass
  141.  
  142.  
  143.  
  144.         for f in w2:
  145.             f.close()
  146.  
  147. exit(0)
  148.  
  149.  
  150.  
  151.  
  152.     if True:
  153.  
  154.         w1_m = open('wykres_1_merge.txt', 'w')
  155.         w1_s = open('wykres_1_shell.txt', 'w')
  156.         w1_q = open('wykres_1_quick.txt', 'w')
  157.         w3_m = open('wykres_3_merge.txt', 'w')
  158.         w3_s = open('wykres_3_shell.txt', 'w')
  159.         w3_q = open('wykres_3_quick.txt', 'w')
  160.  
  161.         w1w3 = (w1_m, w1_s, w1_q, w3_m, w3_s, w3_q)
  162.  
  163.         w1_m.write('Czas obliczeń (ms) mergesorta w zależności od danych wejściowych\n\n')
  164.         w1_s.write('Czas obliczeń (ms) shellsorta w zależności od danych wejściowych\n\n')
  165.         w1_q.write('Czas obliczeń (ms) quicksorta w zależności od danych wejściowych\n\n')
  166.         w3_m.write('Liczba operacji mergesorta w zależności od danych wejściowych\n\n')
  167.         w3_s.write('Liczba operacji shellsorta w zależności od danych wejściowych\n\n')
  168.         w3_q.write('Liczba operacji quicksorta w zależności od danych wejściowych\n\n')
  169.  
  170.  
  171.         for typ in typy:
  172.             for f in w1w3:
  173.                 f.write('\t' + typ)
  174.  
  175.  
  176.         for n in n_args:
  177.             for f in w1w3:
  178.                 f.write('\n'+str(n))
  179.  
  180.             for typ in typy:
  181.  
  182.                 czas_m=czas_s=czas_q=0
  183.                 oper_m=oper_s=oper_q=0
  184.  
  185.                 X=5
  186.                 for _ in range(X):
  187.                     array=losuj(n, mode=typ)
  188.  
  189.                     P = Z = 0
  190.                     start = time.process_time_ns()
  191.                     mergesort(array)
  192.                     stop = time.process_time_ns()
  193.                     czas_m += (stop - start)
  194.                     oper_m += P + Z
  195.  
  196.  
  197.                     P = Z = 0
  198.                     start = time.process_time_ns()
  199.                     shellsort(array)
  200.                     stop = time.process_time_ns()
  201.                     czas_s += (stop - start)
  202.                     oper_s += P + Z
  203.  
  204.  
  205.                     P = Z = 0
  206.                     start = time.process_time_ns()
  207.                     quicksort(array[:50])                               #WAZNE
  208.                     stop = time.process_time_ns()
  209.                     czas_q += (stop - start)
  210.                     oper_q += P + Z
  211.  
  212.  
  213.                 w1_m.write(f'\t{(czas_m//X)//10**6}')
  214.                 w3_m.write(f'\t{oper_m//X}')
  215.                 w1_s.write(f'\t{(czas_s//X)//10**6}')
  216.                 w3_s.write(f'\t{oper_s//X}')
  217.                 w1_q.write(f'\t{(czas_q//X)//10**6}')
  218.                 w3_q.write(f'\t{oper_q//X}')
  219.  
  220.         for f in w1w3:
  221.             f.close()
  222.  
  223.     exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement