@X_Chyaka_X

Как проверить, отсортирован ли массив из целых чисел в порядке возрастания?

Вот мой код. С положительными числами работает, но если внести в массив отрицательные или 0, то даже если массив отсортирован в порядке возрастания - пишет, что не отсортирован.
#include <stdio.h>
#define TRUE 1
#define FALSE 0

int main()
{
    int i, j, size, cum ;
    printf("Vvedite kol-vo elementov massiva: ");
    scanf("%d", &size);
    int array[size];
    printf("Vvedite elementi massiva: \n");
    for (int i = 1; i<=size; i++) {
        scanf("%d", &array[i]);
    }
    for (int i = 1; i<=size; i++) {
        j = i-1;
        if (array[i] > array[j])
            cum = TRUE;
        else {
            cum = FALSE;
            break;
        }
    }
    if (cum == FALSE){
        printf("Массив не отсортироaан\n");
    }
    else {
         printf("Массив отсортирован\n");
    }
}
  • Вопрос задан
  • 769 просмотров
Пригласить эксперта
Ответы на вопрос 2
Типа такого:
Моя оригинальная версия


#define TRUE 1;
#define FALSE 0;

int is_ordered(int* array, int size) {
  // Считаем, что пустой массив или массив из одного элемента - это отсортированный массив
  if (size <= 1)
    return TRUE;
  int previous = array[0];
  for(int i = 1; i < size; i++) { // самый первый элемент мы пропускаем
    int current = array[i];
    if (current < previous)
      return FALSE;
    previous = current;
  }
  return TRUE;
}


UPD: после рефакторинга Wataru
#define TRUE 1;
#define FALSE 0;

int is_ordered(int* array, int size) {
  for(int i = 1; i < size; i++) {
    if (array[i] < array[i-1]) return FALSE;
  }
  return TRUE;
}
Ответ написан
Для начала разберитесь с массивами.
Адресация от 0 до N-1 (где N исло элементов в массиве).
И с объявлением массива. Память под массив выделяется при компиляции, если требуется определить размер массива при выполнении - используйте функции выделения памяти типа maloc().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы