给定一个数组 2 18 3 15 3 9 7 4
我想用一个函数递归地检查数组是否在偶数索引上向上,在奇数索引上向下。 (顺便说一下,这个数组是排序的,我的代码返回 false)
我做了什么:
我创建了一个函数,它检查数组是否在偶数索引上上升并且它正在工作。我创建了另一个函数,它检查数组是否在奇数索引上下降并且它不起作用(返回零而不是一)。
我想要实现的目标:
[已解决] 1.我想获得有关使第二个函数正常工作的帮助,它不起作用真的很奇怪,因为它与第一个函数类似。
在此功能上,我更改了这一行 if (num <= 0)
对此如果 (num <= 1)
。现在已经排序了。
- 我只想创建一个函数,例如调用
SortedUpDown
它将同时递归地检查数组是否在奇数索引上上升,在偶数索引上下降。
这是我的完整代码:
#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
}
最佳答案
这是我对问题第二部分的解决方案:
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);
}
关于c - 给定数组,在偶数索引上确保它向上,在奇数索引上确保它向下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34735144/