Advertisement
Socialking

Untitled

Mar 13th, 2021
835
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.86 KB | None | 0 0
  1. ###################################################
  2. # Importujemy biblioteki, które będziemy używać w programie
  3. # random - generowanie randomowych liczb
  4. # randint - generowanie randomowych integerów liczb
  5. # time - do mozliwości obliczania aktualnie wykonywanego czasu skryptu
  6. ###################################################
  7.  
  8. import random
  9. from random import randint
  10. import time
  11.  
  12. ###################################################
  13. # Tworzymy funkcję do generowania liczb określająca ile liczb ma zostać wygenerowanych
  14. # oraz jaka liczba ma być maksymalna z przedziału, pętla for generuje daną ilość liczb
  15. # wyjściowych jako maksymalny zasięg wielkości listy wpisaną w funkcji
  16. ###################################################
  17.  
  18.  
  19. def create_list(size=10, max=100000):
  20.     return [randint(0, max) for _ in range(size)]
  21.  
  22.  
  23. ###################################################
  24. # Generujemy zmienne z listą liczb nieposrotowanych do dalszego sortowania ich w skryptach
  25. # create_list(wielkość_listy, maksymalna_wielkość_generowanej_liczby)
  26. ###################################################
  27.  
  28. lista100 = create_list(100, 100000)
  29. lista1000 = create_list(1000, 100000)
  30. lista10000 = create_list(10000, 100000)
  31. lista100000 = create_list(100000, 100000)
  32.  
  33.  
  34. ###################################################
  35. # Sortowanie bubbule sort, w tym przypadku jest to lepsza wersja ów skryptu, samo sortowanie
  36. # bubble - czyli inaczej sortowanie bombelkowe polega na porównywaniu dwóch
  37. # kolejnych elementów i zamianie ich kolejności, jeżeli zaburza ona porządek,
  38. # w jakim się sortuje tablicę. Sortowanie kończy się, gdy podczas kolejnego
  39. # przejścia nie dokonano żadnej zmiany.
  40. ###################################################
  41.  
  42. def bubblesort(list):
  43.     # Pętla licząca wielkość listy, len() zwraca ilość obiektów w liście
  44.     for iter_num in range(len(list)-1, 0, -1):
  45.         # Tutaj rozpoczyna się sortowanie obiektów w liście czyli liczb
  46.         for idx in range(iter_num):
  47.             # Skrypt sprawdza dwa kolejne elementy w liście
  48.             if list[idx] > list[idx+1]:
  49.                 # Jeżeli jest większa niż kolejny zamienia je kolejnością
  50.                 temp = list[idx]
  51.                 # Przypisuje wartość aktyalną z kolejną wartością z listy
  52.                 list[idx] = list[idx+1]
  53.                 list[idx+1] = temp
  54.     # Zwracanie posortowanej listy obiektów
  55.     return list
  56.  
  57. ###################################################
  58. ###################################################
  59. ###################################################
  60.  
  61. ###################################################
  62. # Sortowanie po przez wybór - jedna z prostszych metod sortowania o złożoności.
  63. # Polega na wyszukaniu elementu mającego się znaleźć na żądanej pozycji i zamianie miejscami z tym,
  64. # który jest tam obecnie. Operacja jest wykonywana dla wszystkich indeksów sortowanej tablicy.
  65. ###################################################
  66.  
  67.  
  68. def selection_sort(list):
  69.     # Skrypt sprawdza wielkość obecnie wprowadzonej listy
  70.     for idx in range(len(list)):
  71.         # Skrypt wyznacza minimalną wartość
  72.         min_idx = idx
  73.         # Pętla sprawdza indeks danych wartości w liście
  74.         for j in range(idx + 1, len(list)):
  75.             # Jezeli wczesniejsza wartość jest większa od kolejnej w liście
  76.             if list[min_idx] > list[j]:
  77.                 # Zamienia je miejscami i przypisuje indeks wartości poprzedzającej
  78.                 min_idx = j
  79.         # Skrypt przypisuje danym wartością z listy indeksy wartości posrotowanej tablicy dla wszystkich liczb
  80.         list[idx], list[min_idx] = list[min_idx], list[idx]
  81.     # Skrypt zwraca posortowaną listę
  82.     return list
  83.  
  84. ###################################################
  85. ###################################################
  86. ###################################################
  87.  
  88. ###################################################
  89. # Sortowanie Quicksort, czyli tzw szybkie sortowanie. Z tablicy wybiera się element rozdzielający,
  90. # po czym tablica jest dzielona na dwa fragmenty: do początkowego przenoszone są wszystkie elementy nie
  91. # większe od rozdzielającego, do końcowego wszystkie większe. Potem sortuje się osobno początkową
  92. # i końcową część tablicy. Rekurencja kończy się, gdy kolejny fragment uzyskany z
  93. # podziału zawiera pojedynczy element, jako że jednoelementowa tablica nie wymaga sortowania.
  94. ###################################################
  95.  
  96.  
  97. def quicksort(list):
  98.     # Jeżeli ilosć elementów w liście jest mniejsza lub równa 1 zwraca listę, wtedy nie potrzeba sortowania
  99.     if len(list) <= 1:
  100.         return list
  101.     # Element rozdzielający tablice
  102.     pivot = list[len(list) // 2]
  103.     # Wyznaczanie wartości po lewej stronie
  104.     left = [x for x in list if x < pivot]
  105.     # Wyznaczanie wartości po środku
  106.     middle = [x for x in list if x == pivot]
  107.     # Wyznaczanie wartości po prawej stronie
  108.     right = [x for x in list if x > pivot]
  109.  
  110.     # Zwraca posrotowaną listę
  111.     return quicksort(left) + middle + quicksort(right)
  112.  
  113. ###################################################
  114. ###################################################
  115. ###################################################
  116.  
  117. ###################################################
  118. # Sortowanie przez wstawianie - Ten rodzaj sortowania możemy porównać do układania kart pokerzysty.
  119. # Pierwszą kartę wstawiamy w odpowiednie miejsce przesuwając pozostałe, następną także
  120. # wstawiamy między odpowiednie karty i tak układamy zestaw kart
  121. ###################################################
  122.  
  123.  
  124. def insertion_sort(list):
  125.     # Skrypt oblicza wielkość listy
  126.     for i in range(1, len(list)):
  127.         # Skrypt bierze sobie poprzednią wartość ze zbioru
  128.         j = i-1
  129.         # Sprawdzamy miejsce następnego elementu
  130.         nxt_element = list[i]
  131.         # Pętla wykonuje się ciąle do momentu kiedy liczby są zamieniane z następnymi
  132.         while (list[j] > nxt_element) and (j >= 0):
  133.             # Wstawiamy liczbę między poprzedzającą i kolejną
  134.             list[j+1] = list[j]
  135.             # Indeks wcześniejszej liczby
  136.             j = j-1
  137.         # Indeks liczby kolejnej
  138.         list[j+1] = nxt_element
  139.     # Zwracanie listy posrotowanej
  140.     return list
  141.  
  142. ###################################################
  143. ###################################################
  144. ###################################################
  145.  
  146. #######################
  147. ## SORTOWANIA BUBBLE ##
  148. # start_time = time.time() - pobieramy aktyalny czas aby móc zmierzyć czas trwania skryptu
  149. # print(bubblesort(lista1000)) - wyświetlanie i wykonywanie skryptu sortowania na liscie 1000 randomowych liczb
  150. # print('\033[92m' + "[Bubble 100] Czas sortowania: %s sekund " % - \033[92m przypisuje kolor zielony do wyświetlanej informacji
  151. #      (time.time() - start_time) + '\033[0m') - odejmujemy aktualny czas od czasu startowego, w tym przypadku obliczamy ilość
  152. #                                                sekund potrzebnych do wykonana skryptu tzw. execution time script
  153. #######################
  154.  
  155.  
  156. start_time = time.time()
  157. print(bubblesort(lista1000))
  158. print('\033[92m' + "[Bubble 100] Czas sortowania: %s sekund " %
  159.       (time.time() - start_time) + '\033[0m')
  160.  
  161. start_time = time.time()
  162. print(bubblesort(lista1000))
  163. print('\033[92m' + "[Bubble 1000] Czas sortowania: %s sekund " %
  164.       (time.time() - start_time) + '\033[0m')
  165.  
  166. start_time = time.time()
  167. print(bubblesort(lista1000))
  168. print('\033[92m' + "[Bubble 10000] Czas sortowania: %s sekund " %
  169.       (time.time() - start_time) + '\033[0m')
  170.  
  171. start_time = time.time()
  172. print(bubblesort(lista1000))
  173. print('\033[92m' + "[Bubble 100000] Czas sortowania: %s sekund " %
  174.       (time.time() - start_time) + '\033[0m')
  175.  
  176. ###################################################
  177. ###################################################
  178. ###################################################
  179.  
  180. ##########################
  181. ## SORTOWANIA QUICKSORT ##
  182. ##########################
  183.  
  184. start_time = time.time()
  185. print(quicksort(lista100))
  186. print('\033[92m' + "[Quick 100] Czas sortowania: %s sekund " %
  187.       (time.time() - start_time) + '\033[0m')
  188.  
  189. start_time = time.time()
  190. print(quicksort(lista1000))
  191. print('\033[92m' + "[Quick 1000] Czas sortowania: %s sekund " %
  192.       (time.time() - start_time) + '\033[0m')
  193.  
  194. start_time = time.time()
  195. print(quicksort(lista10000))
  196. print('\033[92m' + "[Quick 10000] Czas sortowania: %s sekund " %
  197.       (time.time() - start_time) + '\033[0m')
  198.  
  199. start_time = time.time()
  200. print(quicksort(lista100000))
  201. print('\033[92m' + "[Quick 100000] Czas sortowania: %s sekund " %
  202.       (time.time() - start_time) + '\033[0m')
  203.  
  204. ###################################################
  205. ###################################################
  206. ###################################################
  207.  
  208. ###################################################
  209. ## SORTOWANIA SELECTION SORT (PRZEZ WYBIERANIE) ##
  210. ###################################################
  211.  
  212. start_time = time.time()
  213. print(selection_sort(lista100))
  214. print('\033[92m' + "[Selection 100] Czas sortowania: %s sekund " %
  215.       (time.time() - start_time) + '\033[0m')
  216.  
  217. start_time = time.time()
  218. print(selection_sort(lista1000))
  219. print('\033[92m' + "[Selection 1000] Czas sortowania: %s sekund " %
  220.       (time.time() - start_time) + '\033[0m')
  221.  
  222. start_time = time.time()
  223. print(selection_sort(lista10000))
  224. print('\033[92m' + "[Selection 10000] Czas sortowania: %s sekund " %
  225.       (time.time() - start_time) + '\033[0m')
  226.  
  227. start_time = time.time()
  228. print(selection_sort(lista100000))
  229. print('\033[92m' + "[Selection 100000] Czas sortowania: %s sekund " %
  230.       (time.time() - start_time) + '\033[0m')
  231.  
  232. ###################################################
  233. ###################################################
  234. ###################################################
  235.  
  236. ##################################################
  237. ## SORTOWANIA INSERTION SORT (PRZEZ WSTAWIANIE) ##
  238. ##################################################
  239.  
  240. start_time = time.time()
  241. print(insertion_sort(lista100))
  242. print('\033[92m' + "[Insertion 100] Czas sortowania: %s sekund " %
  243.       (time.time() - start_time) + '\033[0m')
  244.  
  245. start_time = time.time()
  246. print(insertion_sort(lista1000))
  247. print('\033[92m' + "[Insertion 1000] Czas sortowania: %s sekund " %
  248.       (time.time() - start_time) + '\033[0m')
  249.  
  250. start_time = time.time()
  251. print(insertion_sort(lista10000))
  252. print('\033[92m' + "[Insertion 10000] Czas sortowania: %s sekund " %
  253.       (time.time() - start_time) + '\033[0m')
  254.  
  255. start_time = time.time()
  256. print(insertion_sort(lista100000))
  257. print('\033[92m' + "[Insertion 100000] Czas sortowania: %s sekund " %
  258.       (time.time() - start_time) + '\033[0m')
  259.  
  260. ###################################################
  261. ###################################################
  262. ###################################################
  263.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement