Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted

Задание звучит так: массив из 5 рандомых чисел от 0 до 50 и отсортировать числа на непарных местах по возрастанию методом простого обмена в массиве. Итак, проблема заключается в том, что, хоть какие значения я не ставил бы, оно всегда выдает ошибку. Началось всё с того, что я сделал просто массив, который, вроде бы, работал, но всё равно выдавал эту ошибку, я решил, что, когда добавлю сортировку, то всё решится, но нет, оно не сортирует, и после "сортировки" числа заменяются на другие и вообще не по возрастанию. https://prnt.sc/10rv4tx

#include <math.h>
#include <conio.h>
#include <cstdlib>
#include <stdlib.h>
using namespace std;
int main()
{
    const int n = 6;
    double x[n] = { };
    int i, nmax, j,p;
    
    cout << "Before: ";
    for (i = 0; i < 5; i++) {
        x[n] = rand() % 51;
        cout << x[n] << "\t";
    }
    cout << endl;
    for (i = 1; i < n - 1; i++);
        {
            nmax = i;
            for (j = i + 1; j < n; j++) {
                if (x[n] < x[nmax])
                    nmax = j;
                p = x[i];
                x[i] = x[nmax];
                x[nmax] = p;




            }

        }
        cout << "After: ";
        for (i = 0; i < 5; i++) {
            x[n] = rand() %51;
           cout << x[n] << "\t";
        }
    }

Помогите, пожалуйста.


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

Автор решения: Aliaksandra Manulik

Не совсем поняла каким именно нужно методом отсортировать, но предположила два варианта: и так, и то, что закомментировано - работает


#include <math.h>
#include <conio.h>
#include <cstdlib>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
    const int n = 6;
    double x[n] = { };
    int i, nmax, j, p, min;

    cout << "Before: ";
    for (i = 0; i < 5; i++) {
        x[i] = rand() % 51;
        cout << x[i] << "\t";
    }
    cout << endl;

    //Метод пузырька:
    /*for (i = 0; i < n - 1; i++) {

        for (j = i + 1; j < n - 1; j++) {
            if (x[i] > x[j]) {
                p = x[i];
                x[i] = x[j];
                x[j] = p;
            }
        }

    }*/

    //Метод выбора:
    for (i = 0; i < n; i++) {
        min = x[i];
        p = i;
        for (j = i + 1; j < n - 1; j++) {
            if (x[j] < min) {
                min = x[j];
                p = j;
            }
        }
        nmax = x[i];
        x[i] = x[p];
        x[p] = nmax;

    }

    cout << "After: ";
    for (i = 0; i < 5; i++) {
        cout << x[i] << "\t";
    }
}

→ Ссылка