Advertisement
adwas33

Sortowania na tablicach + pomiar czasu

May 7th, 2022
907
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.68 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <utility>
  4.  
  5. #include <algorithm>
  6.  
  7. #include <random>
  8.  
  9. #include <chrono>
  10.  
  11. #include <ctime>
  12.  
  13. using namespace std;
  14.  
  15. using chrono::duration_cast;
  16. using chrono::milliseconds;
  17. using chrono::seconds;
  18. using chrono::system_clock;
  19. template < typename T >
  20. T * copy(T array[], long length) {
  21.     auto resoult = new T[length];
  22.     for (long i = 0; i < length; i++) {
  23.         resoult[i] = array[i];
  24.     }
  25.  
  26.     return resoult;
  27. }
  28. template < typename T >
  29. vector < T > copy(vector < T > array) {
  30.     vector < T > resoult;
  31.     for (const auto & item: array) {
  32.         resoult.push_back(item);
  33.     }
  34.     return resoult;
  35.  
  36. }
  37.  
  38. template < typename T >
  39. T * generate(long length) {
  40.     default_random_engine engine;
  41.     uniform_int_distribution < int > distribution(-10000, 10000);
  42.     auto resoult = new T[length];
  43.     for (long i = 0; i < length; i++) {
  44.         resoult[i] = distribution(engine);
  45.     }
  46.  
  47.     return resoult;
  48. }
  49. template < typename T >
  50. vector < T > generate_vec(long length) {
  51.     default_random_engine engine;
  52.     uniform_int_distribution < int > distribution(-10000, 10000);
  53.     auto resoult = vector < T > (length);
  54.     for (long i = 0; i < length; i++) {
  55.         resoult[i] = distribution(engine);
  56.     }
  57.  
  58.     return resoult;
  59. }
  60.  
  61. template < typename T >
  62. void sout(T arr, long length) {
  63.     for (long l = 0; l < length - 1; l++) {
  64.         cout << arr[l] << " ";
  65.     }
  66.     cout << endl;
  67.  
  68. }
  69.  
  70. template < typename T >
  71. void sout(vector < T > arr) {
  72.     for (const auto & item: arr) {
  73.         cout << item << " ";
  74.     }
  75.     cout << endl;
  76. }
  77.  
  78. template < typename T >
  79. long partition(T * A, long l, long r) {
  80.     T x = A[l];
  81.     long i = l, j = r + 1;
  82.  
  83.     for (;;) {
  84.         do ++i; while (i <= r && A[i] < x);
  85.         do --j; while (A[j] > x);
  86.         if (i > j) {
  87.             break;
  88.         }
  89.         swap(A[i], A[j]);
  90.     }
  91.     A[l] = A[j];
  92.     A[j] = x;
  93.     return j;
  94. }
  95. template < typename T >
  96. long partition(vector < T > A, long l, long r) {
  97.     T x = A[l];
  98.     long i = l, j = r + 1;
  99.  
  100.     for (;;) {
  101.         do ++i; while (i <= r && A[i] < x);
  102.         do --j; while (A[j] > x);
  103.         if (i > j) {
  104.             break;
  105.         }
  106.         swap(A[i], A[j]);
  107.     }
  108.     A[l] = A[j];
  109.     A[j] = x;
  110.     return j;
  111. }
  112.  
  113. template < typename T >
  114. long partition2(T * A, long l, long r) {
  115.     T x = A[r];
  116.     long i = l - 1;
  117.     for (; l < r; ++l) {
  118.         if (A[l] <= x)
  119.             swap(A[++i], A[l]);
  120.     }
  121.     swap(A[i + 1], A[r]);
  122.     return i + 1;
  123. }
  124.  
  125. template < typename T >
  126. long partition2(vector < T > A, long l, long r) {
  127.     T x = A[r];
  128.     long i = l - 1;
  129.     for (; l < r; ++l) {
  130.         if (A[l] <= x)
  131.             swap(A[++i], A[l]);
  132.     }
  133.     swap(A[i + 1], A[r]);
  134.     return i + 1;
  135. }
  136.  
  137. template < typename T >
  138. long partiation3(T * A, long l, long r) {
  139.  
  140. }
  141.  
  142. template < typename T >
  143. void quickSort(T arr[], long poczatek, long koniec) {
  144.     if (poczatek < koniec) {
  145.         long index = partition(arr, poczatek, koniec);
  146.         quickSort(arr, poczatek, index - 1);
  147.         quickSort(arr, index + 1, koniec);
  148.     }
  149. }
  150. template < typename T >
  151. void quickSort(vector < T > arr, long poczatek, long koniec) {
  152.     if (poczatek < koniec) {
  153.         long index = partition(arr, poczatek, koniec);
  154.         quickSort(arr, poczatek, index - 1);
  155.         quickSort(arr, index + 1, koniec);
  156.     }
  157. }
  158.  
  159. template < typename T >
  160. void bubbleSort(T arr[], long poczatek, long koniec) {
  161.     int i, j, n = koniec;
  162.     for (i = poczatek; i < n; i++)
  163.         for (j = poczatek; j < n - i; j++)
  164.             if (arr[j] > arr[j + 1])
  165.                 swap(arr[j], arr[j + 1]);
  166. }
  167. template < typename T >
  168. void hybridQuickSort(T arr[], long poczatek, long koniec) {
  169.     if (poczatek - koniec <= 10) {
  170.  
  171.         bubbleSort(arr, poczatek, koniec);
  172.     } else
  173.     if (poczatek < koniec) {
  174.         long index = partition(arr, poczatek, koniec);
  175.         hybridQuickSort(arr, poczatek, index - 1);
  176.         hybridQuickSort(arr, index + 1, koniec);
  177.     }
  178. }
  179. template < typename T >
  180. void hybridQuickSort(vector < T > arr, long poczatek, long koniec) {
  181.     if (poczatek - koniec <= 10) {
  182.  
  183.         bubbleSort(arr, poczatek, koniec);
  184.     } else
  185.     if (poczatek < koniec) {
  186.         long index = partition(arr, poczatek, koniec);
  187.         hybridQuickSort(arr, poczatek, index - 1);
  188.         hybridQuickSort(arr, index + 1, koniec);
  189.     }
  190. }
  191.  
  192. template < typename T >
  193. void bubbleSort(vector < T > arr, long poczatek, long koniec) {
  194.     int i, j, n = koniec;
  195.     for (i = poczatek; i < n; i++)
  196.         for (j = poczatek; j < n - i; j++)
  197.             if (arr[j] > arr[j + 1])
  198.                 swap(arr[j], arr[j + 1]);
  199. }
  200. int main() {
  201.     long * elementy10_1 = generate < long > (10);
  202.     long * elementy10_2 = copy(elementy10_1, 10);
  203.     long * elementy10_3 = copy(elementy10_1, 10);
  204.  
  205.     long * elementy1000_1 = generate < long > (1000);
  206.     long * elementy1000_2 = copy(elementy10_1, 1000);
  207.     long * elementy1000_3 = copy(elementy10_1, 1000);
  208.  
  209.     long * elementy100000_1 = generate < long > (100000);
  210.     long * elementy100000_2 = copy(elementy10_1, 100000);
  211.     long * elementy100000_3 = copy(elementy10_1, 100000);
  212.  
  213.     auto buble_time_10_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  214.     bubbleSort(elementy10_1, 0, 10);
  215.     auto buble_time_10_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  216.     auto buble_time_1000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  217.     bubbleSort(elementy1000_1, 0, 1000);
  218.     auto buble_time_1000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  219.     auto buble_time_100000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  220.     bubbleSort(elementy100000_1, 0, 100000);
  221.     auto buble_time_100000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  222.     ////////////////////////////////////////
  223.     auto hybrid_time_10_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  224.     hybridQuickSort(elementy10_2, 0, 10);
  225.     auto hybrid_time_10_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  226.     auto hybrid_time_1000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  227.     hybridQuickSort(elementy1000_2, 0, 1000);
  228.     auto hybrid_time_1000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  229.     auto hybrid_time_100000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  230.     hybridQuickSort(elementy100000_2, 0, 100000);
  231.     auto hybrid_time_100000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  232.     ////////////////////////////////////////
  233.     auto quick_time_10_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  234.     quickSort(elementy10_3, 0, 10);
  235.     auto quick_time_10_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  236.     auto quick_time_1000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  237.     quickSort(elementy1000_3, 0, 1000);
  238.     auto quick_time_1000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  239.     auto quick_time_100000_start = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  240.     quickSort(elementy100000_3, 0, 100000);
  241.     auto quick_time_100000_end = duration_cast < milliseconds > (system_clock::now().time_since_epoch()).count();
  242.  
  243.     cout << endl;
  244.     cout << "Dla 10 elementow buble sortem " << buble_time_10_end - buble_time_10_start << endl;
  245.     cout << "Dla 1000 elementow buble sortem " << buble_time_1000_end - buble_time_1000_start << endl;
  246.     cout << "Dla 100000 elementow buble sortem " << buble_time_100000_end - buble_time_100000_start << endl;
  247.  
  248.     cout << "Dla 10 elementow hybrydowym sortowaniem " << hybrid_time_10_end - hybrid_time_10_start << endl;
  249.     cout << "Dla 1000 elementow hybrydowym sortowaniem " << hybrid_time_1000_end - hybrid_time_1000_start << endl;
  250.     cout << "Dla 100000 elementow hybrydowym sortowaniem " << hybrid_time_100000_end - hybrid_time_100000_start << endl;
  251.  
  252.     cout << "Dla 10 elementow quick sortem " << quick_time_10_end - quick_time_10_start << endl;
  253.     cout << "Dla 1000 elementow quick sortem " << quick_time_1000_end - quick_time_1000_start << endl;
  254.     cout << "Dla 100000 elementow quick sortem " << quick_time_100000_end - quick_time_100000_start << endl;
  255.  
  256.     std::cout << "Hello, World!" << std::endl;
  257.     return 0;
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement