- 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()