Advertisement
Petro_zzz

new_lesson6

Aug 29th, 2022 (edited)
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <list>
  4. #include "Header.h"
  5.  
  6. //#define LOGS
  7.  
  8. using namespace std;
  9.  
  10. template <char ch, class T>
  11. void selectSort(long sz, T arr[]);
  12.  
  13.  
  14. void selectSort(long sz, string arr[], bool isBiger = true);
  15.  
  16. template <class T>
  17. void bubbleSort(long sz, T arr[]);
  18.  
  19. void shakerSort(long sz, int arr[]);
  20.  
  21. void genArr(int sz, int arr[]);
  22.  
  23. template <class T>
  24. void showArr(int sz, T arr[]);
  25.  
  26. // как работают шаблоны для разных типов одновременно
  27. template <class T>
  28. void test1(T val) {
  29.     cout << "Template val: " << endl;
  30.     cout.width(7);
  31.     cout << val << " " << sizeof(T) << endl;
  32.     //printf("%f\n", (double)val);
  33. }
  34.  
  35. void test12(int val) {
  36.     cout << "Reload fun val: " << endl;
  37.     cout << val << endl;
  38. }
  39.  
  40. void main() {
  41.     /*
  42.     cout;
  43.     cout << 10.000 << endl;
  44.     test1<double>(10);
  45.     test1<int>(10.1);
  46.     test1('a');
  47.     test1(true);
  48.     */
  49.  
  50.     string strs[5]{ "Ivan", "Vasiliy", "Artur", "Nikolay", "Leonard" };
  51.     int arr[5]{ 3, 2, 1, 2, 3 };
  52.     selectSort<'<'>(5, arr);
  53.     showArr(5, arr);
  54.    
  55. /*
  56.     int arr[5][10];
  57.     genArr(10, arr[0]);
  58.     genArr(10, arr[1]);
  59.     genArr(10, arr[2]);
  60.     genArr(10, arr[3]);
  61.     genArr(10, arr[4]);
  62.  
  63.     cout << "Before sort:" << endl;
  64.    
  65.     showArr(10, arr[0]);
  66.     showArr(10, arr[1]);
  67.     showArr(10, arr[2]);
  68.     showArr(10, arr[3]);
  69.     showArr(10, arr[4]);
  70.    
  71.     bubbleSort(10, arr[0]);
  72.     bubbleSort(10, arr[1]);
  73.     bubbleSort(10, arr[2]);
  74.     bubbleSort(10, arr[3]);
  75.     bubbleSort(10, arr[4]);
  76.  
  77.     cout << "After sort:" << endl;
  78.  
  79.     showArr(10, arr[0]);
  80.     showArr(10, arr[1]);
  81.     showArr(10, arr[2]);
  82.     showArr(10, arr[3]);
  83.     showArr(10, arr[4]);
  84. */
  85.     /*
  86.     const int sz = 10;
  87.     int arr[sz];
  88.     genArr(sz, arr);
  89.     showArr(sz, arr);
  90.     shakerSort(sz, arr);
  91.     showArr(sz, arr);
  92.     */
  93.  
  94. }
  95.  
  96.  
  97. template <char ch, class T>
  98. void selectSort(long sz, T arr[]) {
  99.     long i, j, k;
  100.     T tmp;
  101.     if (ch == '>') {
  102.         // перебор по текущим значениям
  103.         for (i = 0; i < sz; i++) {
  104.             k = i;
  105.             tmp = arr[i];
  106.             // поиск минимума
  107.             for (j = i + 1; j < sz; j++) {
  108.                 if (arr[j] > tmp) {
  109.                     k = j;
  110.                     tmp = arr[j];
  111.                 }
  112.             }
  113.             // обмен текущего значения с минимальным
  114.             if (k != i) {
  115.                 arr[k] = arr[i];
  116.                 arr[i] = tmp;
  117.             }
  118.         }
  119.     }
  120.     if (ch == '<') {
  121.         // перебор по текущим значениям
  122.         for (i = 0; i < sz; i++) {
  123.             k = i;
  124.             tmp = arr[i];
  125.             // поиск минимума
  126.             for (j = i + 1; j < sz; j++) {
  127.                 if (arr[j] < tmp) {
  128.                     k = j;
  129.                     tmp = arr[j];
  130.                 }
  131.             }
  132.             // обмен текущего значения с минимальным
  133.             if (k != i) {
  134.                 arr[k] = arr[i];
  135.                 arr[i] = tmp;
  136.             }
  137.         }
  138.     }
  139. }
  140.  
  141. void selectSort(long sz, string arr[], bool isBiger /* = true*/) {
  142.     long i, j, k;
  143.     string tmp;
  144.     if (isBiger) {
  145.         // перебор по текущим значениям
  146.         for (i = 0; i < sz; i++) {
  147.             k = i;
  148.             tmp = arr[i];
  149.             // поиск минимума
  150.             for (j = i + 1; j < sz; j++) {
  151.                 if (arr[j] > tmp) {
  152.                     k = j;
  153.                     tmp = arr[j];
  154.                 }
  155.             }
  156.             // обмен текущего значения с минимальным
  157.             if (k != i) {
  158.                 arr[k] = arr[i];
  159.                 arr[i] = tmp;
  160.             }
  161.         }
  162.     } else {
  163.         // перебор по текущим значениям
  164.         for (i = 0; i < sz; i++) {
  165.             k = i;
  166.             tmp = arr[i];
  167.             // поиск минимума
  168.             for (j = i + 1; j < sz; j++) {
  169.                 if (arr[j] < tmp) {
  170.                     k = j;
  171.                     tmp = arr[j];
  172.                 }
  173.             }
  174.             // обмен текущего значения с минимальным
  175.             if (k != i) {
  176.                 arr[k] = arr[i];
  177.                 arr[i] = tmp;
  178.             }
  179.         }
  180.     }
  181. }
  182.  
  183.  
  184.  
  185. template <class T>
  186. void bubbleSort(long sz, T arr[]) {
  187.     long i, j;
  188.     T tmp;
  189.     for (i = 0; i < sz; i++)
  190.         for (j = sz - 1; j > 0; j--)
  191.             if (arr[j - 1] > arr[j]) {
  192.                 tmp = arr[j - 1];
  193.                 arr[j - 1] = arr[j];
  194.                 arr[j] = tmp;
  195.             }
  196. }
  197.  
  198. void shakerSort(long sz, int arr[]) {
  199.     int j, k = sz - 1;
  200.     int lb = 1, ub = sz - 1;
  201.     int tmp;
  202.     do {
  203.         for (j = ub; j >= 0; j--) {
  204.             if (arr[j - 1] > arr[j]) {
  205.                 tmp = arr[j - 1];
  206.                 arr[j - 1] = arr[j];
  207.                 arr[j] = tmp;
  208.                 k = j;
  209. #ifdef LOGS
  210.                 Sleep(7000);
  211.                 showArr(sz, arr);                
  212. #endif // LOGS
  213.             }
  214.         }
  215.         lb = k + 1;
  216.         for (j = 1; j <= ub; j++) {
  217.             if (arr[j - 1] > arr[j]) {
  218.                 tmp = arr[j - 1];
  219.                 arr[j - 1] = arr[j];
  220.                 arr[j] = tmp;
  221.                 k = j;
  222. #ifdef LOGS
  223.                 Sleep(7000);
  224.                 showArr(sz, arr);                
  225. #endif // LOGS
  226.             }
  227.         }
  228.         ub = k - 1;
  229.     } while (lb < ub);
  230. }
  231.  
  232. void genArr(int sz, int arr[]) {
  233.     for (int k = 0; k < sz; k++)
  234.         arr[k] = rand() % 100;
  235. }
  236.  
  237. template <class T>
  238. void showArr(int sz, T arr[]) {
  239.     for (int k = 0; k < sz; k++)
  240.         cout << arr[k] << " ";
  241.     cout << endl;
  242. }
  243.  
  244.  
  245.  
  246. // https://pastebin.com/V5czMCjc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement