Функция сортировки прерывается, когда я пытаюсь изменить ее в обратном алфавитном порядке? - PullRequest
0 голосов
/ 25 апреля 2019

Итак, у меня есть эта функция, которая в настоящее время сортирует массив масс, который я подключаю к нему, и сортирует его в алфавитном порядке, как показано:

void string_rearrangement(Employee payroll[], int size)
{
    //declaring temporary struct
    Employee temp;
    int i = 0, j = 0;

    for (i = 0; i <= size; i++)
    {
        for (j = i + 1; j <= size; j++)
        {
            if (strcmp(payroll[i].name, payroll[j].name) >0)
            {
                temp = payroll[i];
                payroll[i] = payroll[j];
                payroll[j] = temp;
            }
        }
    }

}

Это работает. Я проверял это. Вот снимок экрана с выводом, который я получаю, когда печатаю имена: https://i.imgur.com/YhUzUa0.png

Но теперь я хотел изменить это так, чтобы это дало мне обратный алфавитный порядок. Я думал, что это просто изменит условие strcmp на <0, как показано: </p>

            if (strcmp(payroll[i].name, payroll[j].name) <0)

Но когда я это делаю, я получаю какой-то сумасшедший вывод, подобный этому: https://i.imgur.com/JdI0v8b.png

Единственное, что я изменил в коде, это> 0, поэтому я не уверен, почему это происходит.

1 Ответ

2 голосов
/ 25 апреля 2019
for (i = 0; i <= size; i++)
{
    for (j = i + 1; j <= size; j++)

Вы должны почти наверняка использовать < вместо <= здесь.Вы пересекаете границы массива и ведете себя неопределенным образом.Вам просто невероятно повезло, что ваш код работал до того, как вы изменили порядок сортировки.

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