- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我正在尝试为我的 C++ 类创建一个二进制排序算法,但是当我的 binarySearch 函数运行时,我一直遇到段错误。无论我和我的室友怎么看,我们都找不到问题所在。任何帮助将不胜感激。
int binarySearch(int arr[], int k, int first, int last)
{
if(arr[first] <= arr[last])
{
int mid = (first + last) / 2;
if(k == arr[mid])
{
return mid;
}
else if (k < arr[mid])
{
return binarySearch(arr, k, first, mid-1);
}
else return binarySearch(arr, k, mid+1, last);
}
else if(arr[first] >= arr[last])
{
int mid = (first + last) / 2;
if(k == arr[mid])
{
return mid;
}
else if (k < arr[mid])
{
return binarySearch(arr, k, mid+1, last);
}
else return binarySearch(arr, k, first, mid-1);
}
else return -1;
}
修复段错误后,我注意到我的逻辑中一定有错误,因为程序一直输出无法找到键,即使它存在于数组中。
最佳答案
如果您要搜索的元素在数组中,您的代码实际上可以工作。但是,它不会捕获不正确的输入。
调用函数时,请确保:
first
和 last
介于 0 和(数组长度 - 1)之间first < last
例如:如果数组有 10 个元素,则 first 和 last 必须介于 0 和 9 之间。
尝试 this :
int main() {
int a[] = {134, 232, 233, 234, 587, 623, 793, 802, 963, 1074};
int b[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int na = binarySearch(a, 587, 0, 9);
int nb = binarySearch(b, 3, 0, 9);
printf("na: %d\n", na); // prints 'na: 4'
printf("nb: %d\n", nb); // prints 'nb: 7'
}
如果您要搜索的元素不在数组中,那么递归永远不会终止,您可以通过将以下内容添加到 binarySearch()
的头部来解决这个问题:
if (first == last && k != arr[first])
return -1;
关于c++ - C++ 中的二进制搜索 : Ascending + Descending Ordered Arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009726/
我有以下 SP CREATE PROCEDURE GetAllHouses set @webRegionID = 2 set @sortBy = 'case_no' set @
您好,我想知道如何在 SQL 服务器中完成。 我的代码不起作用。 SELECT * FROM TABLE_NAME WHERE NAME = 'United Kingdom' ORDER BY Nam
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
我正在尝试创建一个Java程序,该程序读取键盘输入的数字字符串, 并给出最长的升序子字符串。 以下是我的代码: import java.util.Scanner; public class Ascen
我曾经在 SGS 2 I9100 (4.1.2) 上测试我的应用程序,在设备出现缺陷后我购买了华为 Ascend P6 (4.2)。我必须始终以 HiSuite 模式连接它,这会在 PC 上启动他们烦
在 Interface Builder 中,我希望能够通过 Cap Height 对齐 UILabel。在 IB 中没有办法做到这一点,所以我想我可能会扩展 UILabel,以便框架从 Cap Hei
本题其实改编自one previously asked by Mat.S (image)。虽然被删了,但我觉得这是个好问题,所以重新发一下,要求更明确,有自己的解决方案。 给定一个字母和数字列表,假设
我想知道 d3 中排序函数和升序函数之间的区别。 我正在寻找一种方法来按所选列的升序重新排列表中的数据。 谢谢。 最佳答案 Array.sort()将按字母顺序对值进行升序排序。 Array.sort
我有一个 gridview,当用户单击标题时,我需要对其元素进行排序。 它的数据源是一个List对象。 aspx 是这样定义的:
我有一个包含以下代码的条件查询: CriteriaQuery criteria = cb.createQuery(MyClass.class); Root root = criteria.from(M
我使用用户输入存储五个不同的值。并按照从命令提示符插入的方式进行显示,现在我想在显示过程中将输出组织为升序或降序顺序。我搜索了这个,但我得到了更复杂的例子。我的代码非常简单。我在学习。到目前为止,我已
我是java初学者..我刚刚开始在线学习数据结构。我想按升序打印添加到二叉树中的值。 我创建了一个方法 print 并尝试使用以下值: 9,5,2,8,3 它打印了这个输出并停止了 2 , 3 ,8
我正在为我的 iOS 应用程序使用自定义字体。我的 View 需要根据 View 的大小为字体选择不同的磅值。如果我有一个预定的 CGFloat ascender; 我基本上想确定这一点 CGFloa
在我看来这像是 Webkit 错误,但我不确定。尽管 元素已正确 border-box值,影子 DOM 以某种方式将所有重置为默认值 content-box . Firefox 是一致的。 IE/Ed
这个问题在这里已经有了答案: The model item passed into the dictionary is of type .. but this dictionary requires
我已经找了很久,但没有找到实际的答案,因为我看不到任何以升序键开头然后以降序值开头的答案。 一个更清楚的例子: d = {'banana':3, 'orange':5, 'apple':5} out:
在像堆排序或快速排序这样的排序算法中,为什么标准出版物或研究论文在可以简单地分别使用升序或降序时更喜欢术语“非降序”或“非升序”?我的意思是无论如何意思都是一样的。 最佳答案 非升序(和非降序)包括相
我有一个大表(现在约 100 万行,很快约 1000 万行)有两个排名列(除了常规数据): avg_visited,一个 0-1 的 float ,代表百分比年龄;越高越好 alexa_rank,一个
如果我运行这个: ALTER TABLE `equipos11a12` ORDER BY `ID` 它只会发生一次。如果我更改 ID,它不会按升序更改。 我必须每次都运行 alter table
在核心数据获取请求中,我想对结果进行排序,不区分大小写。所以我编码: NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
我是一名优秀的程序员,十分优秀!