как отсортировать массив на c++

введите сюда описание изображения

мне нужно отсортировать массив как в задании а, но мой код выдает ошибку, как ее исправить

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int getRandomNumber(int a, int b) {
    return rand() % (b - a + 1) + a;
}

void reverseArray(int arr[], int size) {
    for (int i = 0; i < size / 2; i++) {
        sort(arr.begin() + i, arr.begin() + size - i - 1, greater<int>());
    }
}

int main() {
    setlocale(LC_ALL, "rus");
    int n, a, b;
    int sum = 0, sum1 = 0;
    cout << "Введите размер массива: ";
    cin >> n;
    if (n <= 0) {
        cout << "Размер массива должен быть положительным числом!" << endl;
        return 0;
    }
    cout << "Введите первый элемент диапазона: ";
    cin >> a;
    if (a < 0 || a > 100) {
        std::cout << "Некорректный первый элемент диапазона!";
        return 0;
    }
    cout << "Введите последний элемент диапазона: ";
    cin >> b;
    if (b < 0 || b > 100) {
        cout << "Некорректный последний элемент диапазона!";
        return 0;
    }
    if (a > b) {
        cout << "Первый элемент диапазона должен быть меньше или равен последнему!";
        return 0;
    }

    int* arr = new int[n];
    for (int i = 0; i < n; i++) {
        arr[i] = getRandomNumber(a, b);
        cout << arr[i] << " ";
    }

    reverseArray(arr, n); // Реверс массива

    cout << "\nРеверсированный массив: ";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }

    delete[] arr;
    return 0;
}

Ответы (2 шт):

Автор решения: Harry

P.S. Вы привели свой некомпилируемый код, спросили об ошибке компиляции. Постепенно началось обычное "дайте воды попить, а то так есть хочется, что и переночевать негде" — выцыганить полное решение.

Нет уж. "Вернулся старик от синего моря, а перед ним его старуха с разбитым корытом" (с)

    sort(arr + i, arr + size - i - 1, greater<int>());

Вот так ваш код компилируется.

А первоначальный ответ я удалил.

→ Ссылка
Автор решения: NunOfIt

В соответствие с заданием, вам не нужно ничего сортировать, вам просто нужно выполнить ревёрс элементов первой и второй части массива, т.е. поствить их в обратном порядке. Пример: [7, 4, -3, 1, 0, 12] -> [-3, 4, 7, 12, 0, 1]

#include <ctime>
#include <clocale>
#include <cstdlib>
#include <iostream>
#include <exception>

class Random {
    int _start, _end, _mod;

public:
    Random(): Random(0, 0) {}

    Random(int start, int end) {
        (void) set(start, end);
        std::srand((unsigned int) std::time(NULL));
    }

    int generate() { return rand() % _mod + _start; }

    template<typename T>
    void fill(T& arr) {
        for(auto& el: arr)
            el = generate();
    }

    // Getters

    int get_end() const { return _end; }
    int get_start() const { return _start; }

    // Setters

    void set_end(int val) { (void) set(_start, val); }
    void set_start(int val) { (void) set(val, _end); }

    void set(int start, int end) {
        if(start > end)
            throw std::invalid_argument("Значение end должно быть больше либо равно start!");

        _end = end;
        _start = start;
        _mod = end - start + 1;
    }
};

class Array {
    int* _arr;
    int _size;

    static constexpr int DEFAULT_SIZE = 8;

public:
    Array(): Array(DEFAULT_SIZE) {}
    Array(int size) {
        if(size <= 0)
            throw std::invalid_argument("Размер массива должен быть натуральным числом!");
        (void) _set(size);
    }
    Array(const Array& other) { (void) _set(other); }

    ~Array() { delete[] _arr; }

    void shift() {
        int temp = _arr[0];
        for(int i = 1; i < _size; ++i)
            _arr[i - 1] = _arr[i];
        _arr[_size - 1] = temp;
    }

    void reverse(int start, int end) {
        (void) _index_out_of_range_exception(end);
        (void) _index_out_of_range_exception(start);

        int temp;
        for(; start < end; ++start, --end) {
            temp = _arr[start];
            _arr[start] = _arr[end];
            _arr[end] = temp;
        }
    }

    int size() const { return _size; }

    int& operator[](int index) {
        (void) _index_out_of_range_exception(index);
        return _arr[index];
    }

    explicit operator bool() const { return bool(_size); }

    int* begin() { return _arr; }
    int* end() { return _arr + _size; }

    friend std::ostream& operator<<(std::ostream&, const Array&);

private:
    void _set(int size) {
        _size = size;
        _arr = new int[size]{};
    }

    void _set(const Array& other) {
        (void) _set(other._size);
        for(int i = 0; i < other._size; ++i)
            _arr[i] = other._arr[i];
    }

    void _index_out_of_range_exception(int index) {
        if(index < 0 || index >= _size)
            throw std::out_of_range("index out of range!");
    }
};

std::ostream& operator<<(std::ostream& out, const Array& other) {
    out << '[';
    if(other) {
        out << other._arr[0];
        for(int i = 1; i < other._size; ++i)
            out << ", " << other._arr[i];
    }
    out << ']';
    return out;
}

void scan(int (&data)[3]) {
    std::cout << "Введите размер массива: ";
    std::cin >> data[0];

    std::cout << "Введите начальное значение диапозона: ";
    std::cin >> data[1];
    std::cout << "Введите конечное значение диапозона: ";
    std::cin >> data[2];

    std::cout << '\n';
}

void exA(int (&data)[3], Random& rnd) {
    std::cout << "Задание А:\n\n";
    (void) scan(data);

    Array arr(data[0]);
    rnd.set(data[1], data[2]);

    rnd.fill(arr);
    std::cout << "Массив: " << arr << '\n';

    arr.shift();
    std::cout << "Результат: " << arr << '\n';
}

void exB(int (&data)[3], Random& rnd) {
    std::cout << "Задание В:\n\n";
    (void) scan(data);

    if(data[0] & 1)
        throw std::domain_error("Размер массива должен быть чётным!");

    Array arr(data[0]);
    rnd.set(data[1], data[2]);

    rnd.fill(arr);
    std::cout << "Массив: " << arr << '\n';

    int mid = arr.size() / 2;
    arr.reverse(0, mid - 1);
    arr.reverse(mid, arr.size() - 1);
    std::cout << "Результат: " << arr << '\n';
}

int main()
{
    std::setlocale(LC_ALL, "rus");

    Random rnd;
    int data[3];

    (void) exA(data, rnd);
    std::cout << '\n';

    (void) exB(data, rnd);

    return 0;
}
→ Ссылка