【发布时间】:2016-11-15 15:36:36
【问题描述】:
我写了一个递归函数来检查一个大小为 n 的数组是否按升序排列:
bool sortedAscending(const int*x, int n){
if (n == 0) return true;
if (x[n - 1] >= x[n - 2]) sortedAscending(x, n - 1);
else return false;
}
我想做同样的工作,但使用二分搜索算法(即每次递归调用将数组分成两半......)。我怎样才能做到这一点? 谢谢。
【问题讨论】:
-
递归函数应该使用一对迭代器——一个在它应该检查的范围的开头和一个结尾。然后你可以轻松地递归调用它,只需将范围减半。
-
两个问题。 (1)
if (n <= 1) return true;- 一个元素的数组总是排序的;以下代码假定至少有两个元素。 (2)return sortedAscending(x, n - 1);- 您缺少return声明。另外,最后两行可以简化为return x[n - 1] >= x[n - 2] && sortedAscending(x, n - 1); -
但是每次拆分时我比较什么值?
-
为什么要使用效率较低的方法?
-
我不确定“二进制搜索”方法在检查数组是否已排序时是否有意义。无论如何,您都必须查看每个元素,因此直接遍历数组可能会更快。你想把它作为一个练习来做还是你认为它会更快?
标签: c++ recursion binary-search