在.NET/C#环境中,什么是二进制搜索以及如何/为什么使用二进制搜索?

在.NET/C#环境中,什么是二进制搜索以及如何/为什么使用二进制搜索?,c#,.net,binary-search,C#,.net,Binary Search,今天我第一次在维基百科上读到关于二进制搜索的内容,只是粗略地浏览了一下表面。它似乎用于在内存稀疏的集合中快速查找项目 在.NET/C环境中,我是否需要使用它?您是否曾经在构建实际生产软件时使用过它们 我很抱歉,如果这个问题被认为是煽动性的,但我作为一个学生在问一个真实的问题 列表也有一个方法。如果您有一个已排序的列表并且需要查找元素,则可以使用它们。因为它们返回一个索引,所以你可以做一些你不能用直接字典做的事情,比如查找小于键的最大元素 我在现实软件中使用过二进制搜索的一个地方是进行范围搜索。运

今天我第一次在维基百科上读到关于二进制搜索的内容,只是粗略地浏览了一下表面。它似乎用于在内存稀疏的集合中快速查找项目

在.NET/C环境中,我是否需要使用它?您是否曾经在构建实际生产软件时使用过它们

我很抱歉,如果这个问题被认为是煽动性的,但我作为一个学生在问一个真实的问题

列表
也有一个方法。如果您有一个已排序的列表并且需要查找元素,则可以使用它们。因为它们返回一个索引,所以你可以做一些你不能用直接字典做的事情,比如查找小于键的最大元素

我在现实软件中使用过二进制搜索的一个地方是进行范围搜索。运费是针对重量范围给出的,因此0-1磅可能有一个运费,1-5磅可能有一个运费,5-10磅可能有一个运费。如果我调用
List.BinarySearch
并查找4磅,它会给我第一个高于4磅的索引,我可以使用查找1-5磅范围的索引。字典只会告诉我4磅没找到


对于一般排序的数据,通常最好使用或

二进制搜索只对已排序的数据起作用,因此只要你有一些C#中的数据集合,你知道这些数据已排序,你就可以对其进行二进制搜索。您最好使用已经提供的实现(例如
List.BinarySearch()
),但是如果您使用的特定集合没有二进制搜索方法,您可以随时编写一个

下面是一个使用内置库的示例:

// An ordered list of ints
List<int> ints = new List<int>() { 1, 4, 8, 20, 30, 44 };

// Search for 5 in the list
int ix = ints.BinarySearch(8);

// Display the index the element 8 was found at
Console.WriteLine(ix);
//整数的有序列表
List ints=new List(){1,4,8,20,30,44};
//在列表中搜索5
intix=ints.BinarySearch(8);
//显示元素8所在的索引
控制台写入线(ix);
是的,在搜索排序数据时,您肯定希望使用二进制搜索。

不久前(当我还是计算机工程专业的学生时),我必须使用搜索算法。这些课程的结果是一篇论文


我在我的博客上发布了关于。尽管它是C++代码,但它应该为你提供<强> >如何/为什么使用二进制搜索。文中还介绍了如何实现二进制搜索算法。提供了一个示例应用程序,您可以自己测试。

您可以在.NET中使用二进制搜索,原因与在其他平台上使用相同。请不要更改标题,我特意编写了C,因为我需要与该语言相关的答案(如果有的话)。谢谢。你说的“发现索引元素5”是什么意思?您的列表中没有五个。感谢您捕获该类型。我的意思是8,被搜索的元素。