valenki13

my_lib.h

Nov 15th, 2023
843
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.94 KB | None | 0 0
  1. // my_lib.h
  2. #pragma once
  3.  
  4. #include <iostream>
  5.  
  6. template<class Type>
  7. int dsize(Type* a) {
  8.     if (a)
  9.         return _msize(a) / sizeof(Type);
  10.     else
  11.         return 0;
  12. }
  13.  
  14. template<class Type>
  15. void show_arr(int sz, Type* arr, char ch = ' ') {
  16.     for (int k = 0; k < sz; ++k)
  17.         std::cout << arr[k] << ch;
  18.     std::cout << std::endl;
  19. }
  20.  
  21. template <class Type>
  22. bool append(Type*& arr, Type val) {
  23.     if (arr) {
  24.         auto buff = new Type[dsize(arr) + 1];
  25.         for (int k = 0; k < dsize(arr); ++k)
  26.             buff[k] = arr[k];
  27.         buff[dsize(arr)] = val;
  28.         delete[] arr;
  29.         arr = buff;
  30.         return true;
  31.     }
  32.     else {
  33.         return false;
  34.     }
  35. }
  36.  
  37. template<class Type>
  38. bool insert(Type*& arr, int id, Type val) {
  39.     if (arr && dsize(arr) > id) {
  40.         auto buff = new Type[dsize(arr) + 1];
  41.         for (int k = 0; k < id; ++k)
  42.             buff[k] = arr[k];
  43.         buff[id] = val;
  44.         for (int k = id; k < dsize(arr); k++)
  45.             buff[k + 1] = arr[k];
  46.         //show_arr(dsize(buff), buff);
  47.         delete[] arr;
  48.         arr = buff;
  49.         return true;
  50.     }
  51.     else {
  52.         return false;
  53.     }
  54. }
  55.  
  56. template<class Type>
  57. void myswap(Type& a, Type& b) {
  58.     Type t = a;
  59.     a = b;
  60.     b = t;
  61. }
  62.  
  63. template<class Type>
  64. void shuffle(Type* arr) {
  65.     int sz = dsize(arr);
  66.     for (int k = 0; k < 100; k++)
  67.         myswap(arr[rand() % sz],
  68.             arr[rand() % sz]
  69.         );
  70. }
  71.  
  72. template <class Type>
  73. int get_min(int size, Type* arr) {
  74.     Type min_val = arr[0];
  75.     int min_id = 0;
  76.     for (int k = 1; k < size; k++) {
  77.         if (min_val > arr[k]) {
  78.             min_val = arr[k];
  79.             min_id = k;
  80.         }
  81.     }
  82.     return min_id;
  83. }
  84.  
  85. template <class Type>
  86. void select_sort(int size, Type* arr) {
  87.     for (int k = 0; k < size; k++) {
  88.         myswap(arr[k],
  89.             arr[get_min(size - k, arr + k) + k]);
  90.     }
  91. }
  92.  
  93. template <class Type>
  94. void bubble_sort(int size, Type* arr) {
  95.     int iter = 0;
  96.     for (int w = 0; w < size; w++) {
  97.         //cout << "---- Walk " << w + 1
  98.         //  << " ----" << endl;
  99.         bool is_sort = true;
  100.         for (int k = 0; k < size - 1 - w; k++) {
  101.             if (arr[k] < arr[k + 1]) {
  102.                 myswap(arr[k], arr[k + 1]);
  103.                 is_sort = false;
  104.             }
  105.             /*cout << iter++ << " : "
  106.                  << is_sort << " : ";
  107.             show_arr(size, arr);*/
  108.         }
  109.         if (is_sort)
  110.             return;
  111.     }
  112. }
  113.  
  114. template<class Type>
  115. void spec_show(int begin, int end, Type* arr) {
  116.     for (int k = begin; k < end; k++) {
  117.         std::cout << arr[k] << " ";
  118.     }
  119. }
  120.  
  121. template<class Type>
  122. void isert_sort(int size, Type* arr) {
  123.     int iter = 0;
  124.     for (int w = 1; w < size; w++) {
  125.         int k, t = arr[w];
  126.         for (k = w - 1; k >= 0 && arr[k] < t; k--) {
  127.             arr[k + 1] = arr[k];
  128.             //std::cout << iter++ << " " << t << " : ";
  129.             //spec_show(0, k, arr);
  130.             //std::cout << "(" << t << ") ";
  131.             //spec_show(k+1, size, arr);
  132.             //cout << std::endl;
  133.         }
  134.         arr[k + 1] = t;
  135.     }
  136. }
  137.  
  138.  
  139. void discrete_sort(int size, int* arr) {
  140.     // array values are from 0 to 10
  141.     int baskets[10]{};
  142.     for (int k = 0; k < size; k++) {
  143.         baskets[arr[k]]++;
  144.     }
  145.     int n = 0;
  146.     for (int k = 0; k < std::size(baskets); k++) {
  147.         while (baskets[k] > 0) {
  148.             arr[n] = k;
  149.             baskets[k]--;
  150.             n++;
  151.         }
  152.     }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment