avr39-ripe

dynArr2DSortNegZerPos

Sep 26th, 2019
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <chrono>
  3.  
  4. enum kinds {NEG, ZER, POS};
  5.  
  6. int* createArr(int& arrSize)
  7. {
  8.     srand(time(nullptr));
  9.  
  10.     int* arr = new int[!arrSize ? (arrSize = rand() % 11 + 10) : arrSize];
  11.  
  12.     for (int i = 0; i < arrSize; i++)
  13.     {
  14.         arr[i] = rand() % 19 - 9;
  15.         std::cout << arr[i] << ' ';
  16.     }
  17.     std::cout << '\n';
  18.     return arr;
  19. }
  20.  
  21. int** sortArr(int* arr, int arrSize)
  22. {
  23.     int** arr2d = new int*[3];
  24.     int* lineArr  = new int[arrSize+3];
  25.  
  26.     int cnt[3]{};
  27.     for (int i = 0; i < arrSize; i++)
  28.     {
  29.         if (arr[i] == 0) { cnt[ZER]++; continue; };
  30.         arr[i] > 0 ? cnt[POS]++ : cnt[NEG]++;
  31.     }
  32.  
  33.     for(int i=0, lineArrPos = 0; i<3; lineArrPos += cnt[i] + 1,i++)
  34.     {
  35.         std::cout << cnt[i] << '\n';
  36.         arr2d[i] = lineArr + lineArrPos;
  37.         arr2d[i][cnt[i]] = (i == ZER);
  38.     }
  39.  
  40.     for (int i = arrSize - 1; i >= 0; i--)
  41.     {
  42.         if (arr[i] == 0) { arr2d[ZER][(cnt[ZER]--) - 1] = arr[i]; continue; };
  43.         arr[i] > 0 ? arr2d[POS][--cnt[POS]] = arr[i] : arr2d[NEG][--cnt[NEG]] = arr[i];
  44.     }
  45.  
  46.     return arr2d;
  47. }
  48.  
  49. void printArr2D(int** arr2d)
  50. {
  51.     for (int y=0; y<3; y++)
  52.     {
  53.         for(int x = 0; y == ZER ? !arr2d[y][x] : arr2d[y][x]; x++ )
  54.         {
  55.             std::cout << arr2d[y][x] << ' ';
  56.         }
  57.         std::cout << '\n';
  58.     }
  59. }
  60.  
  61. int main()
  62. {
  63.     int arrSize = 0;
  64.     auto arr = createArr(arrSize);
  65.     auto arr2d = sortArr(arr, arrSize);
  66.     printArr2D(arr2d);
  67.  
  68.     delete[] arr2d[0];
  69.     delete[] arr2d;
  70.     delete[] arr;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment