Это определение массива из 2000 целых чисел.
int list[2000];
Это чтение 2000-й записи в этом массиве и неопределенное, потому что самый высокий юридический индекс для доступа - 1999. Помните, что первый юридический индекс индекс равен 0.
list[2000]
Так что да, с точки зрения компилятора, следующее дает только одно целое число поверх неопределенного поведения (то есть "зло").
isSorted(list[2000]);
Вы, вероятно, должны изменить это, чтобы решить непосредственную проблему - и приблизиться к тому, что вы, вероятно, хотите. Он называет весь массив в качестве параметра. Он будет уменьшаться до указателя на int (среди прочего, теряется информация о размере, но вы жестко закодировали это внутри функции; лучше изменить это между прочим).
isSorted(list);
Удалите пропущенный первый вхождение ( один в строке), оставьте второй (тот, который присваивается переменной bool).
С другой стороны, лог c вашей проверки сортировки имеет недостатки, он часто будет иметь доступ за пределами массив для индексов 0 и 1999. Т.е. в начале и в конце вашего l oop. Вам нужно l oop немного меньше, чем весь массив, и использовать только одно из двух условий.
Т.е. сделать
for (i = 1; i < 2000; i++)
{
if (list[i] < list[i - 1])
/* ... */
Лог c для проверки восходящего или нисходящего сортировка должна быть более сложной. Вопрос не в том, чтобы исправить эту логику c, поэтому я придерживаюсь решения проблем в соответствии с исходной версией (в которой не упоминалась двусторонняя сортировка).
Вы на самом деле не спрашивали о исправлении логи c за это. Но вот подсказка:
Либо используйте две петли, которые вы можете разорвать, как только обнаружите конфликт, но не сразу вернетесь из функции.
Или используйте одну l oop и оставьте флажок о том, был ли нарушен восходящий или нисходящий порядок. Затем верните true, если либо флаг все еще не активен (или оба, в случае всех идентичных значений), либо верните false, если оба установлены.