from timeit import default_timer as time import random import matplotlib.pyplot as plt def insertion_sort(data): start = time() n = len(data) for i in range(1, n): current = data[i] j = i while (j > 0) and (current < data[j - 1]): data[j] = data[j - 1] j -= 1 data[j] = current koniec = time() return koniec - start def selection_sort( data): start = time() n = len(data) for i in range(n): min_id = i for j in range(i + 1, n): if (data[j] < data[min_id]): min_id = j if min_id != i: data[min_id], data[i] = data[i], data[min_id] koniec = time() return koniec - start def tim_sort(data): start = time() n = len(data) for i in range(n): z = data.sort() koniec = time() return koniec-start def tworzenie_tablic_liczbowych_o_okreslonej_dlugosci(n): tablica = [] for i in range(n): tablica.append(random.randint(0, 10)) return tablica def czasy_dla_poszczegolnej_dlugosci_tablicy(h, maksymalna_liczba_danych,krok,n): s = 0 tablica_czasow_dla_poszczegolnej_funkcji = [] p = int(maksymalna_liczba_danych / krok) for z in range(p): s = s + krok data = tworzenie_tablic_liczbowych_o_okreslonej_dlugosci(s) if n == "rosnaco": n = len(data) for i in range(1, n): current = data[i] j = i while (j > 0) and (current < data[j - 1]): data[j] = data[j - 1] j -= 1 data[j] = current n = "rosnaco" if n == "malejaco": n = len(data) for i in range(1, n): current = data[i] j = i while (j > 0) and (current > data[j - 1]): data[j] = data[j - 1] j -= 1 data[j] = current n = "malejaco" f = h(data) tablica_czasow_dla_poszczegolnej_funkcji.append(f) return tablica_czasow_dla_poszczegolnej_funkcji def tworzenie_osi_x_do_wykresow(maksymalna_liczba_danych,krok): l = 0 x = [] p = int(maksymalna_liczba_danych / krok) for i in range(p): l = l + krok x.append(l) return x def tworzenie_wykresow(dane_wejsciowe): y = czasy_dla_poszczegolnej_dlugosci_tablicy(insertion_sort,maksymalna_liczba_danych,krok,dane_wejsciowe) y_1 = czasy_dla_poszczegolnej_dlugosci_tablicy(selection_sort,maksymalna_liczba_danych,krok, dane_wejsciowe) y_2 = czasy_dla_poszczegolnej_dlugosci_tablicy(tim_sort,maksymalna_liczba_danych,krok,dane_wejsciowe) plt.plot(x, y, x, y_1, x, y_2) plt.xlabel("Liczba danych do sortowania") plt.legend(['insertion_sort', 'selection_sort','tim_sort']) maksymalna_liczba_danych = 1000 krok = 100 x = tworzenie_osi_x_do_wykresow(maksymalna_liczba_danych,krok) plt.subplot2grid([2, 2], [1, 1]) z = tworzenie_wykresow("losowo") plt.title("Dane Losowe") plt.ylabel("Czas trwania operacji [s]") plt.subplot2grid([2, 2], [0, 0]) f = tworzenie_wykresow("rosnaco") plt.title("Dane Rosnące") plt.ylabel("Czas trwania operacji [s]") plt.subplot2grid([2, 2], [0, 1]) g = tworzenie_wykresow("malejaco") plt.title("Dane Malejące") plt.ylabel("Czas trwania operacji [s]") plt.show()