arrays - 这两个递归函数可以合并为一个吗?
问题描述
int sorted_a(int arr[], int N)
{
if (N == 1 || N == 0)
return 1;
if (arr[N - 1] < arr[N - 2])
{
return 0;
}
return sorted_a(arr, N - 1);
}
int sorted_d(int arr[], int N)
{
if (N == 1 || N == 0)
return 1;
if (arr[N - 1] > arr[N - 2])
{
return 0;
}
return sorted_d(arr, N - 1);
}
这是两个单独的递归函数,用于检查数组是按升序还是降序排序(它们为每种情况返回一个),我似乎无法找到一种方法只使用一个来完成这项工作(该函数必须只返回 1如果无论顺序如何(升序或降序)都已排序。有什么帮助吗?
编辑: 也许我的问题不够清楚。我只想创建一个问题,仅当数组已排序时才返回 1(无论升序/降序排序的方向如何),否则返回 0。
解决方案
由于大多数解决方案一次只处理一个升序/降序,或者对我来说似乎过于复杂,因此这里有一个 [非递归] 版本,用于在单个函数中单次测试升序/降序:
int
sorted(const int *arr,int N)
{
int sorted = 0x03;
do {
if (N < 2)
break;
int prev = arr[0];
int cur;
for (int idx = 1; idx < N; ++idx, prev = cur) {
cur = arr[idx];
// get difference
int dif = cur - prev;
// the same -- no change in state
if (dif == 0)
continue;
// one of the sort directions is [now] wrong
if (dif < 0)
sorted &= 0x01;
else
sorted &= 0x02;
// both directions are unsorted -- stop early
if (! sorted)
break;
}
} while (0);
return sorted;
}
推荐阅读
- r - 如何检查向量或数据框是否具有特定值的特定顺序?
- xml - 纳斯达克上的 Googlesheets xpath/xquery
- tsql - 39位数字的T-SQL数据类型?
- bash - 重击。在每个函数中调用一个函数
- python - 我如何使 xticks 等距,尽管它们很有价值?
- cordova - 如何在不破坏一切的情况下放置一个cordova插件?
- css - 如何仅在登录页面上有正文背景图片
- c - 计算两个日期之间的天数,但结果错误
- javascript - 在 typescript 中创建类似 lodash get 的最佳方法?
- java - 如何从具有多行的 JTable 中的列中读取 JComboBox 值