草庐IT

BinarySearch

全部标签

c# - 如何对 List<T> 使用 BinarySearch

让我们从ListBinarySearch的重载开始:publicintBinarySearch(Titem,IComparercomparer);众所周知,在使用BinarySearch之前,应该使用适当的IComparer对列表进行排序。但是然后:要搜索列表,您将必须提供一个T项。当人们习惯于根据项目的属性搜索列表中的项目(即使用Linq或委托(delegate)/谓词)时,这是相当出乎意料的。因为当我已经有了我的T项目时,我就不需要搜索它了!现在我在C#中实现C++代码,看到C++程序员在他的代码中到处使用C++风格的二进制搜索,如下所示。首先他制作了一个新的Titem,并赋予了这

c# - ArrayList 二进制搜索

我正在忙着准备MCTS70-536考试,根据考试书(MicrosoftPress-.NETFramework-ApplicationDevelopmentFoundationSelfPacedTrainingKit2ndEdition),这段代码示例:ArrayListal=newArrayList();al.AddRange(newstring[]{"Hello","world","this","is","a","test"});Console.WriteLine(al.BinarySearch("this"));将值“2”输出到控制台,因为项目“this”位于索引2。同意这是我运行

c# - 为什么 C# Array.BinarySearch 这么快?

我在C#中实现了一个非常简单的binarySearch实现,用于在整数数组中查找整数:二分查找staticintbinarySearch(int[]arr,inti){intlow=0,high=arr.Length-1,mid;while(lowarr[mid])low=mid+1;elsereturnmid;}return-1;}将它与C#的原生Array.BinarySearch()进行比较时,我可以看到Array.BinarySearch()快两倍以上作为我的功能,每一次。MSDNArray.BinarySearch:Searchesanentireone-dimensiona

c# - 为什么会有 List<T>.BinarySearch(...)?

我正在查看List,我看到一个带有一些重载的BinarySearch方法,我不禁想知道在List中使用这样的方法是否有意义?除非列表已排序,否则为什么我要进行二分查找?如果列表未排序,调用该方法只会浪费CPU时间。在List上使用该方法有什么意义? 最佳答案 除了其他正确答案外,我还注意到二分查找出奇地难以正确编写。有很多极端情况和一些棘手的整数运算。由于二分搜索显然是排序列表上的常见操作,BCL团队通过一次正确编写二分搜索算法而不是鼓励客户都编写自己的二分搜索算法来为世界提供服务;很多客户编写的算法都是错误的。

java - 为什么 Arrays.binarySearch(Object[],Object) 采用 Object args?

方法publicstaticintbinarySearch(Object[]a,Objectkey)Arrays类的在其实现中按照binarySearch算法遍历数组参数a并将a的元素转换为Comparable和调用compareTo(key)直到找到匹配项或用完所有可能性。然而,我对实现感到困惑,如果这种情况是该方法总是将元素转换为Comparable,并且如果遇到ClassCastException一个没有实现Comparable的元素,API用户是否更清楚该方法将只考虑数组元素的比较器而不是键的比较器,更多通过防止在数组类型与Comparable不兼容的情况下进行调用的编译来防止

具有多个参数的 Java 泛型

我在网站上看到了处理具有多个参数的泛型的示例,但没有一个适合我的情况。事情是这样的:我正在尝试学习Java泛型,并决定创建一个简单的二进制数组搜索实用程序函数。我正在使用自定义对象和整数对其进行测试。为了获得有关错误和警告的反馈,我使用的是Eclipse。这是我所拥有的:publicstaticintbinarySearch(Comparable[]array,Comparableitem,intstart,intend){if(end0){returnbinarySearch(array,item,mid+1,end);}elseif(item.compareTo(array[mid

【算法】二分查找——BinarySearch

一、概述二分查找又称折半查找,是一种能够大幅减少时间复杂度的查找方法,但是二分查找要求线性表必须词用顺序储存结构,而且表中元素按关键字有序排列。在后续讨论中,我们假设有序表递增有序。二分查找中使用的术语:目标Target——你要查找的值索引Index——你要查找的当前位置左、右指示符Left,Right——我们用来维持查找空间的指标中间指示符Mid——我们用来应用条件来确定我们应该向左查找还是向右查找的索引。二、一个典型的二分查找二分查找的过程为:从表的中间记录middle开始,如果要查找的目标值target等于middle,则查找成功;如果target>middle,则说明应从middle的

java - Collections.binarySearch(List list, K key) 说明。 java

给出以下声明,摘自thisOraclejava教程,与类Collections的binarySearch()方法相关:Thereturnvalueisthesameforbothforms.IftheListcontainsthesearchkey,itsindexisreturned.Ifnot,thereturnvalueis(-(insertionpoint)-1),wheretheinsertionpointisthepointatwhichthevaluewouldbeinsertedintotheList,ortheindexofthefirstelementgreater

java - Collections.binarySearch() 与 List indexOf()

我有一个包含超过37K项的列表,并且我已经实现了hashCode()、equals(),所以我想知道Collections.binarySearch()可以帮助提高性能并且比indexOf()方法更快。 最佳答案 如果您的集合已排序,binarySearch()将是O(logn)而不是indexOf()的O(n),您肯定会看到一个改进。 关于java-Collections.binarySearch()与ListindexOf(),我们在StackOverflow上找到一个类似的问题:

java - 为什么在 Java 中对列表进行 binarySearch?

鉴于列表已排序,我不确定为什么作为通用数据结构的列表应该具有二进制搜索算法。接受索引的get方法不是按顺序遍历列表吗,至少对于List的子类型LinkedList是这样?如果是这样,与LinkedList的顺序比较相比,我看不出使用binarySearch有任何优势。当然,除非我们将List限制为ArrayList,否则我们可以更有信心地进行binarySearch。我的理解对吗?谢谢。 最佳答案 有很多方法可以实现List。标准Java库中有ArrayList、LinkedList、CopyOnWriteArrayList等,除此