Facebook
From Melodic Kangaroo, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 139
  1. from timeit import default_timer as time
  2. import random
  3. import matplotlib.pyplot as plt
  4.  
  5. def insertion_sort(data):
  6.         start = time()
  7.         n = len(data)
  8.         for i in range(1, n):
  9.             current = data[i]
  10.             j = i
  11.             while (j > 0) and (current < data[j - 1]):
  12.                 data[j] = data[j - 1]
  13.                 j -= 1
  14.             data[j] = current
  15.         koniec = time()
  16.         return koniec - start
  17. def selection_sort( data):
  18.         start = time()
  19.         n = len(data)
  20.  
  21.         for i in range(n):
  22.             min_id = i
  23.             for j in range(i + 1, n):
  24.                 if (data[j] < data[min_id]):
  25.                     min_id = j
  26.             if min_id != i:
  27.                 data[min_id], data[i] = data[i], data[min_id]
  28.             koniec = time()
  29.         return koniec - start
  30. def tim_sort(data):
  31.         start = time()
  32.         n = len(data)
  33.         for i in range(n):
  34.             z = data.sort()
  35.         koniec = time()
  36.         return koniec-start
  37.  
  38. def tworzenie_tablic_liczbowych_o_okreslonej_dlugosci(n):
  39.         tablica = []
  40.         for i in range(n):
  41.             tablica.append(random.randint(0, 10))
  42.         return tablica
  43.  
  44.  
  45. def czasy_dla_poszczegolnej_dlugosci_tablicy(h, maksymalna_liczba_danych,krok,n):
  46.     s = 0
  47.     tablica_czasow_dla_poszczegolnej_funkcji = []
  48.     p = int(maksymalna_liczba_danych / krok)
  49.     for z in range(p):
  50.         s = s + krok
  51.         data = tworzenie_tablic_liczbowych_o_okreslonej_dlugosci(s)
  52.  
  53.         if n == "rosnaco":
  54.             n = len(data)
  55.             for i in range(1, n):
  56.                 current = data[i]
  57.                 j = i
  58.                 while (j > 0) and (current < data[j - 1]):
  59.                     data[j] = data[j - 1]
  60.                     j -= 1
  61.                 data[j] = current
  62.             n = "rosnaco"
  63.         if n == "malejaco":
  64.             n = len(data)
  65.             for i in range(1, n):
  66.                 current = data[i]
  67.                 j = i
  68.                 while (j > 0) and (current > data[j - 1]):
  69.                     data[j] = data[j - 1]
  70.                     j -= 1
  71.                 data[j] = current
  72.             n = "malejaco"
  73.  
  74.  
  75.  
  76.         f = h(data)
  77.  
  78.         tablica_czasow_dla_poszczegolnej_funkcji.append(f)
  79.     return tablica_czasow_dla_poszczegolnej_funkcji
  80. def tworzenie_osi_x_do_wykresow(maksymalna_liczba_danych,krok):
  81.     l = 0
  82.     x = []
  83.     p = int(maksymalna_liczba_danych / krok)
  84.     for i in range(p):
  85.         l = l + krok
  86.         x.append(l)
  87.     return x
  88.  
  89. def tworzenie_wykresow(dane_wejsciowe):
  90.  
  91.     y = czasy_dla_poszczegolnej_dlugosci_tablicy(insertion_sort,maksymalna_liczba_danych,krok,dane_wejsciowe)
  92.     y_1 = czasy_dla_poszczegolnej_dlugosci_tablicy(selection_sort,maksymalna_liczba_danych,krok, dane_wejsciowe)
  93.     y_2 = czasy_dla_poszczegolnej_dlugosci_tablicy(tim_sort,maksymalna_liczba_danych,krok,dane_wejsciowe)
  94.     plt.plot(x, y, x, y_1, x, y_2)
  95.     plt.xlabel("Liczba danych do sortowania")
  96.     plt.legend(['insertion_sort', 'selection_sort','tim_sort'])
  97.  
  98. maksymalna_liczba_danych = 1000
  99. krok = 100
  100. x = tworzenie_osi_x_do_wykresow(maksymalna_liczba_danych,krok)
  101. plt.subplot2grid([2, 2], [1, 1])
  102. z = tworzenie_wykresow("losowo")
  103. plt.title("Dane Losowe")
  104. plt.ylabel("Czas trwania operacji [s]")
  105. plt.subplot2grid([2, 2], [0, 0])
  106. f = tworzenie_wykresow("rosnaco")
  107. plt.title("Dane Rosnące")
  108. plt.ylabel("Czas trwania operacji [s]")
  109. plt.subplot2grid([2, 2], [0, 1])
  110. g = tworzenie_wykresow("malejaco")
  111. plt.title("Dane Malejące")
  112. plt.ylabel("Czas trwania operacji [s]")
  113. plt.show()
  114.