valenki13

my_lib.h

Nov 8th, 2023
665
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 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. void discrete_sort(int size, int* arr) {
  94.     // array values are from 0 to 10
  95.     int baskets[10]{};
  96.     for (int k = 0; k < size; k++) {
  97.         baskets[arr[k]]++;
  98.     }
  99.     int n = 0;
  100.     for (int k = 0; k < std::size(baskets); k++) {
  101.         while (baskets[k] > 0) {
  102.             arr[n] = k;
  103.             baskets[k]--;
  104.             n++;
  105.         }
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment