C 递归检查数组是否按偶数索引排序

C 递归检查数组是否按偶数索引排序,c,arrays,C,Arrays,我试图编写一个递归函数,检查给定数组是否按偶数索引向上排序。例如,我有一个大小为5的数组。数字是1,2,3,4,5。它将返回1,因为arr[0]

我试图编写一个递归函数,检查给定数组是否按偶数索引向上排序。例如,我有一个大小为5的数组。数字是
1,2,3,4,5
。它将
返回1
,因为
arr[0]

这方面的问题是:

if (i >= arr[isEven]) return 1; //Sorted
代码如下:

#include <stdio.h>
#include <conio.h>

int SortedUpDown(int arr, int num);

int main()
{
    int sizeOfArr = 0, i = 0,*arr, num = 0, checkIfSorted = -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", &num);
        *(arr + i) = num;
        printf("%d ", arr[i]);
    }
    checkIfSorted = SortedUpDown(*arr,sizeOfArr);
    getch();

    return 0;
}

int SortedUpDown(int *arr, int num)
{
    int i = 0, isEven = 0;
    if (num % 2 == 0) isEven = num - 2; //if The array is even, (for example arr[6] then check 0,1,2,3,4,5 only 0,2,4)
    else isEven = num - 1; //if the array is odd, (for example arr[7] then check 0,1,2,3,4,5,6 only 0,2,4,6)
    if (i >= arr[isEven]) return 1; //Sorted
    if (arr[i] > arr[i + 2]) return 0; //Not sorted
    return i += 2, SortedUpDown(arr, num); //Advance i by 2.
}
编辑:我现在想检查它是否向下移动以获得奇数索引,但不起作用,下面是我的代码:

我有两个问题:

  • 为什么它不起作用

  • 你能帮我在一个函数中写下这两个函数吗?也就是说,它会同时检查偶数索引和奇数索引
  • #包括
    #包括
    #包括
    int-SortedDown(int*arr,int-num);
    int-SortedUp(int*arr,int-num);
    内部主(空)
    {
    int sizeofar=0,i=0,*arr,num=0,checkIfSortedDown=-1,checkIfSortedUp=-1;
    printf(“输入数组的大小:\n”);
    scanf(“%d”&sizeofar);
    printf(“在数组中输入%d个数字\n:,sizeofar”);
    arr=(int*)malloc(sizeofar*sizeof(int));
    对于(i=0;i如果(num看起来,当您从sortedDupDown()内调用sortedDupDown()时,您会遇到一个无限循环,因为每次调用时i都设置为零

    尝试使用static来保存'i'的值

    static int i = 0;
    
    编辑:

    此外,我还修复了一些问题,从fn声明作为指针开始

    int SortedUpDown(int *arr, int num);
    
    并称之为:

    checkIfSorted = SortedUpDown(arr,sizeOfArr);
    
    以下是完整代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int SortedUpDown(int *arr, int num);
    
    int main()
    {
        int sizeOfArr = 0, i = 0,*arr, num = 0, checkIfSorted = -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", &num);
            *(arr + i) = num;
            printf("%d ", arr[i]);
        }
        checkIfSorted = SortedUpDown(arr,sizeOfArr);
        printf("\ndone %d\n",checkIfSorted);
        //getch();
    
        return 0;
    }
    
    int SortedUpDown(int *arr, int num)    
    {
        static int i = 0;
        if (i >= num - 1) return 1;
        if (arr[i] > arr[i + 1]) return 0;
        return i++, SortedUpDown(arr, num);
    }
    
    #包括
    #包括
    int-SortedUpDown(int*arr,int-num);
    int main()
    {
    int-sizeofar=0,i=0,*arr,num=0,checkIfSorted=-1;
    printf(“输入数组的大小:\n”);
    scanf(“%d”&sizeofar);
    printf(“在数组中输入%d个数字\n:,sizeofar”);
    arr=(int*)malloc(sizeofar*sizeof(int));
    对于(i=0;i=num-1)返回1;
    如果(arr[i]>arr[i+1])返回0;
    返回i++,向下排序(arr,num);
    }
    
    从SortedDupDown()中调用SortedDupDown()时,您似乎遇到了一个无限循环,因为每次调用时i都设置为零

    尝试使用static来保存'i'的值

    static int i = 0;
    
    编辑:

    此外,我还修复了一些问题,从fn声明作为指针开始

    int SortedUpDown(int *arr, int num);
    
    并称之为:

    checkIfSorted = SortedUpDown(arr,sizeOfArr);
    
    以下是完整代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int SortedUpDown(int *arr, int num);
    
    int main()
    {
        int sizeOfArr = 0, i = 0,*arr, num = 0, checkIfSorted = -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", &num);
            *(arr + i) = num;
            printf("%d ", arr[i]);
        }
        checkIfSorted = SortedUpDown(arr,sizeOfArr);
        printf("\ndone %d\n",checkIfSorted);
        //getch();
    
        return 0;
    }
    
    int SortedUpDown(int *arr, int num)    
    {
        static int i = 0;
        if (i >= num - 1) return 1;
        if (arr[i] > arr[i + 1]) return 0;
        return i++, SortedUpDown(arr, num);
    }
    
    #包括
    #包括
    int-SortedUpDown(int*arr,int-num);
    int main()
    {
    int-sizeofar=0,i=0,*arr,num=0,checkIfSorted=-1;
    printf(“输入数组的大小:\n”);
    scanf(“%d”&sizeofar);
    printf(“在数组中输入%d个数字\n:,sizeofar”);
    arr=(int*)malloc(sizeofar*sizeof(int));
    对于(i=0;i=num-1)返回1;
    如果(arr[i]>arr[i+1])返回0;
    返回i++,向下排序(arr,num);
    }
    
    #包括
    #包含//是否需要此标题
    #包括//非标准
    int-SortedUpDown(int*arr,int-num);//原型匹配实现
    内部主(空)
    {
    int-sizeofar=0,i=0,*arr,num=0,checkIfSorted=-1;
    printf(“输入数组的大小:\n”);
    scanf(“%d”&sizeofar);
    printf(“在数组中输入%d个数字\n:,sizeofar”);
    arr=(int*)malloc(sizeofar*sizeof(int));
    对于(i=0;i
    #包括
    #包含//是否需要此标题
    #包括//非标准
    int-SortedUpDown(int*arr,int-num);//原型匹配实现
    内部主(空)
    {
    int-sizeofar=0,i=0,*arr,num=0,checkIfSorted=-1;
    printf(“输入数组的大小:\n”);
    scanf(“%d”&sizeofar);
    printf(“在数组中输入%d个数字\n:,sizeofar”);
    arr=(int*)malloc(sizeofar*sizeof(int));
    对于(i=0;i