Сортировка одномерного массива

247
03 мая 2018, 09:06

Задача заключается в том, что дан массив действительных чисел a1, a2, ..., a2n. Необходимо получить a1, a2n, a2, a2n -1, ..., an, an + 1.

Говоря простым языком, если дан массив из пяти чисел, например: 1 2 3 4 5, то в результате необходимо получить: 1 5 2 4 3.

Пытался отсортировать массив следующим образом, но что-то пошло не так:

    for (int i = 0; i <= arr_size / 2.0; i++) {
    double temp = arr[i + 1];
    arr[i + 1] = arr[arr_size - i];
    arr[arr_size - i] = temp;
}
Answer 1

Если я верно понял ваш алгоритм, то ваш алгоритм заключается в следующем:
У вас есть исходный массив. Далее вам нужно его преобразовать следующим образом: читать числа из исходного массива поочередно то с начала массива, то с конца.

Вот код, который будет делать то, что вам нужно(без создания нового массива, путем модификации существующего).

#include <iostream>
using namespace std;
int main() {
    int a[] = {1, 2, 3, 4, 5};
    const int arrsize = sizeof(a) / sizeof(int);
    for (int i = 0; i < arrsize/2; ++i)
    {
       int temp = a[arrsize - 1];
       for (int j = arrsize - 1; j > (i * 2 + 1); --j)
       {
           a[j] = a[j - 1];
       }
       a[i * 2 + 1] = temp;
    }
    for (int i = 0; i < arrsize; ++i)
        std::cout << a[i];
    std::cout << std::endl;
}

Вывод будет: 1,5,2,4,3.

Для массива большей длины также будет работать.

Answer 2

Попробуй вместо arr[arr_size-i] поставить arr[arr_size-1]

Answer 3

Предложу и свою версию:

int main(int argc, char *argv[])
{
    std::cout << "Input number of members\n";
    int nMembers;
    std::cin >> nMembers;
    std::vector<int> arr(nMembers, 0);
    std::cout << "Input array\n";
    for (auto &i : arr) {
        std::cin >> i;
    }
    std::vector<int> nov(arr.size(), 0);
    bool val = false;
    for (auto i = arr.begin(), j = --arr.end(), l = nov.begin(); l != nov.end(); ++l) {
        if (!val) {
            *l = *i;
            i++;
            val = true;
        }
        else {
            *l = *j;
            j--;
            val = false;
        }
    }
    for (const auto &i : nov) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
READ ALSO
Как работает деструктор std::allocator

Как работает деструктор std::allocator

Допустим в ф-ции я создаю allocator, он распределяет память, потому деалацирует её, но представим что я забыл деалацировать какой-то отдельный...

224
Нужна помощь в задании по С++

Нужна помощь в задании по С++

Нужно написать программу для шифрования и дешифрования файла за указанным именему меня не получается зашифровать файл поскольку прогамма...

263
Как сохранить toggle class, цвет элемента li

Как сохранить toggle class, цвет элемента li

Есть список ul li, который хранит в себе данные вписанные пользователем в формыДанные добавляются в li и в localStorage объект(данные не пропадают...

286