Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <chrono>
- enum kinds {NEG, ZER, POS};
- int* createArr(int& arrSize)
- {
- srand(time(nullptr));
- int* arr = new int[!arrSize ? (arrSize = rand() % 11 + 10) : arrSize];
- for (int i = 0; i < arrSize; i++)
- {
- arr[i] = rand() % 19 - 9;
- std::cout << arr[i] << ' ';
- }
- std::cout << '\n';
- return arr;
- }
- int** sortArr(int* arr, int arrSize)
- {
- int** arr2d = new int*[3];
- int* lineArr = new int[arrSize+3];
- int cnt[3]{};
- for (int i = 0; i < arrSize; i++)
- {
- if (arr[i] == 0) { cnt[ZER]++; continue; };
- arr[i] > 0 ? cnt[POS]++ : cnt[NEG]++;
- }
- for(int i=0, lineArrPos = 0; i<3; lineArrPos += cnt[i] + 1,i++)
- {
- std::cout << cnt[i] << '\n';
- arr2d[i] = lineArr + lineArrPos;
- arr2d[i][cnt[i]] = (i == ZER);
- }
- for (int i = arrSize - 1; i >= 0; i--)
- {
- if (arr[i] == 0) { arr2d[ZER][(cnt[ZER]--) - 1] = arr[i]; continue; };
- arr[i] > 0 ? arr2d[POS][--cnt[POS]] = arr[i] : arr2d[NEG][--cnt[NEG]] = arr[i];
- }
- return arr2d;
- }
- void printArr2D(int** arr2d)
- {
- for (int y=0; y<3; y++)
- {
- for(int x = 0; y == ZER ? !arr2d[y][x] : arr2d[y][x]; x++ )
- {
- std::cout << arr2d[y][x] << ' ';
- }
- std::cout << '\n';
- }
- }
- int main()
- {
- int arrSize = 0;
- auto arr = createArr(arrSize);
- auto arr2d = sortArr(arr, arrSize);
- printArr2D(arr2d);
- delete[] arr2d[0];
- delete[] arr2d;
- delete[] arr;
- }
Advertisement
Add Comment
Please, Sign In to add comment