Сортировка массива - проблема - PullRequest
0 голосов
/ 22 октября 2018

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

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int v[100], n, i, aux = 0, inv;
    cout << "Number of elements: ";
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cout << "v[" << i << "]=";
        cin >> v[i];
    }

    do
    {   
        inv = 0;
        for (i = 0; i < n; i++)
        {
            if (v[i] % 2 == 1 && v[i + 1] % 2 == 0)
            {
                inv = 1;
                aux = v[i];
                v[i] = v[i + 1];
                v[i + 1] = aux;
            }
        }
    } while (inv != 0);
    cout << endl;

    for (i = 0; i < n; i++)
        cout << v[i] << " ";
    cout << endl;
    system("pause");
    return 0;
}

Вывод для этого будет:

n = 8
1 3 2 4 7 8 4 2

Result: 2 4 8 4 2 -858993460 1 3

1 Ответ

0 голосов
/ 22 октября 2018

В выражении v[i + 1] вы получаете доступ к v[n], когда i = n - 1, это приведет к выходу за пределы памяти, что приведет к поведению undefined .Вам следует изменить цикл for следующим образом:

for (i = 0; i < n - 1; i++)

Выход для данного ввода:

a.exe
Number of elements: 8
v[0]=1
v[1]=3
v[2]=2
v[3]=4
v[4]=7
v[5]=8
v[6]=4
v[7]=2

2 4 8 4 2 1 3 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...