给定数组,偶数索引确保它上升,奇数索引下降

时间:2016-01-12 03:32:48

标签: c arrays

给定一个数组2 18 3 15 3 9 7 4我想用一个函数递归检查,如果数组在偶数索引上,而在奇数索引上。 (顺便说一句,这个数组是排序的,我的代码在那里返回false)

我做了什么:

我已经创建了一个函数来检查数组是否在偶数索引上运行并且它正在运行。我已经创建了另一个函数来检查数组是否在奇数索引上运行并且它不起作用(返回零而不是一个)。

我想要实现的目标:

[已解决] 1.我希望得到第二个功能正常工作的帮助,它真的很奇怪它不起作用,因为它类似于第一个功能。

在此功能上,如果if (num <= 0)我已将此行(num <= 1)更改为此行。它现在排序。

  1. 我想制作一个函数,例如SortedUpDown,如果数组在偶数索引上向上和向下,则会递归检查。
  2. 这是我的完整代码:

    #include <stdio.h>
    #include <stdlib.h> 
    #include <conio.h>  
    
    int SortedDown(int *arr, int num); 
    int SortedUp(int *arr, int num);
    
    int main(void)
    {
        int sizeOfArr = 0, i = 0, *arr, num = 0, checkIfSortedDown = -1, checkIfSortedUp = -1;
        printf("Enter the size of the array : \n");
        scanf("%d", &sizeOfArr);
        printf("Enter %d numbers to the array \n: ", sizeOfArr);
        arr = (int *)malloc(sizeOfArr * sizeof(int));
        for (i = 0; i < sizeOfArr; i++)
        {
            scanf("%d", arr + i);
            printf("%d ", arr[i]);
        }
        puts("");
        checkIfSortedDown = SortedDown(arr, sizeOfArr);
        checkIfSortedUp = SortedUp(arr, sizeOfArr);
        if (checkIfSortedDown && checkIfSortedUp)
            puts("Sorted");
        else
            puts("Not Sorted");
        free(arr);
        getch();
    
        return 0;
    }
    
    int SortedDown(int *arr, int num) {
        --num;//size to last index
        if (num % 2 != 0) //if index is not even
            --num;
        if (num <= 0)
            return 1;//Sorted
        else if (arr[num - 2] > arr[num])
            return 0;//Not sorted
        else
            return SortedDown(arr, num - 2 + 1);//+1 : last index to size
    }
    
    int SortedUp(int *arr, int num) {
        --num;//size to last index
        if (num % 2 == 0)
            --num;
        if (num <= 0)
            return 1;//Sorted
        else if (arr[num - 2] < arr[num])
            return 0;//Not sorted
        else
            return SortedUp(arr, num - 2 + 1);//+1 : last index to size
    }
    

1 个答案:

答案 0 :(得分:1)

以下是我对问题第二部分的解决方案:

int SortedUpDown(int * arr, int num) {
  if (num < 3) {
    return 1; // it's always sorted 
  }

  if (arr[0] > arr[2]) {
    return 0;
  }

  if (num > 3 && arr[1] < arr[3]) {
    return 0;
  }
  return SortedUpDown(arr + 2, num - 2);
}