Advertisement
avr39ripe

BV024arrShiftSimpleInefficient

Jan 21st, 2021
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. void printArr(T* arr, int arrSize)
  5. {
  6.     for (int i{ 0 }; i < arrSize; ++i)
  7.     {
  8.         std::cout << arr[i] << ' ';
  9.     }
  10.     std::cout << '\n';
  11. }
  12.  
  13.  
  14. template <typename T>
  15. void shiftRight(T* arr, int arrSize)
  16. {
  17.     T tmp{ arr[arrSize - 1] };
  18.     for (int i{ arrSize - 1 }; i > 0; --i)
  19.     {
  20.         arr[i] = arr[i - 1];
  21.     }
  22.     arr[0] = tmp;
  23. }
  24.  
  25.  
  26. template <typename T>
  27. void shiftLeft(T* arr, int arrSize)
  28. {
  29.     T tmp{ arr[0] };
  30.     for (int i{ 0 }; i < (arrSize -1 ); ++i)
  31.     {
  32.         arr[i] = arr[i + 1];
  33.     }
  34.     arr[arrSize - 1] = tmp;
  35. }
  36.  
  37.  
  38. template <typename T>
  39. void shiftCycle(T* arr, int arrSize, int shifts)
  40. {
  41.     shifts %= arrSize; // 2 % 10 = 2
  42.     /*
  43.     *  int n {10};
  44.     *  int m {3};
  45.     *
  46.     *  n % m => n - ( n / m) * m
  47.     * 0 % 2 = 0
  48.     * 1 % 2 = 1
  49.     * 2 % 2 = 0
  50.     * 3 % 2 = 1
  51.     * 4 % 2 = 0
  52.     * 5 % 2 = 1
  53.     */
  54.  
  55.     if (shifts > 0)
  56.     {
  57.         while (shifts--)
  58.         {
  59.             shiftRight(arr, arrSize);
  60.             printArr(arr, arrSize);
  61.         }
  62.     }
  63.     else
  64.     {
  65.         shifts = -shifts;
  66.         while (shifts--)
  67.         {
  68.             shiftLeft(arr, arrSize);
  69.             printArr(arr, arrSize);
  70.         }
  71.     }
  72.    
  73. }
  74.  
  75. int main()
  76. {
  77.     const int arrSize{ 10 };
  78.     int arr[arrSize]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  79.  
  80.     printArr(arr, arrSize);
  81.     //shiftRight(arr, arrSize);
  82.     //shiftLeft(arr, arrSize);
  83.  
  84.     shiftCycle(arr, arrSize, -32);
  85.  
  86.     printArr(arr, arrSize);
  87.  
  88.     return 0;
  89. }
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement