首页 > 编程知识 正文

二分查找算法c语言,二分查找算法举例说明

时间:2023-05-03 13:03:28 阅读:128901 作者:2200

数组中的查找算法和二分查找算法-在-Java语言实现前文以前的大二学生时,为了让rzdxlc们对编程感兴趣,我决定和她们分享编程技能。 我以前和rydsy分享过一元二次方程-Java语言的实现,如果这次也和rzdxlc们分享同样的知识,我会看起来很低。 我也失去了她们的宠爱。

我一直在想。 我应该和她们分享什么呢……

突然,长得很好的rzdxlc对我说。 我想找一只漂亮的虾。 于是我在脑子里,干脆我给她们写搜索算法吧。 但是,仅仅写一个搜索算法可能满足不了rzdxlc们对知识的渴望。 她们对知识像狼一样的心,我深有体会……

rzdxlc露出邪魅笑着对我说。 她想快点找到漂亮的虾

一听就明白了,果然霸气的葡萄酒做什么都喜欢快一点,或者更快一点

我从她的这句话中得到灵感。 直接搜索太晚了。 再优化一下吧。 整个二分搜索算法不是更快了吗? 这样一定能让她们满意吧

说做就做,于是我整理了思路,开始写代码

本文向rzdxlc们进行说明。 在大学里找到合适的漂亮虾就像从排列中找到你要找的数量一样

首先,创建一个可以包含10个元素的int类型数组

intarray [ ]=new int [ ] { 3,6,7,9,10,1,2,4,5,8 }; 然后输入要查询的数字,并将其与数组中的元素进行比较

int i; for(I=0; i array.length; I ) { int k=i 1; 找到if (key==array [ I ] )。 是第' k '个数) ); 布雷克; }if(I==Array.Length ) System.out.println ('未找到); 如果迭代变量I超过数组长度,则找不到输出

以下是完整的代码公共类搜索{公共类语音(字符串)交织)=newint ) ) 3、6、7、9、10、1、2、4系统sannersc=newscanner(system.in; int key=sc.nextInt (; int i; for(I=0; i array.length; I ) { int k=i 1; 找到if (key==array [ I ] )。 是第' k '个数) ); 布雷克; }if(I==Array.Length ) System.out.println ('未找到); }在二分搜索算法上写的垃圾最多的搜索算法,没有大脑暴力

写一些有技术含量的折半搜索吧

这次需要建立升序数组

intarray [ ]=new int [ ] { 1,2,3,4,5,6,7,8,9,10 }; 接下来定义几个变量

int key; //key要查找的数量int low=0; //low是数组第一个元素的下标int high=array.length-1; //high是数组最后一个元素的下标int middle; //middle是数组中间元素的下标,现在正式开始搜索

wile(high=low ) {middle=) lowhigh )/2; if(Array[middle]key ) { low=middle 1; }elseif(Array[middle]key ) { high=middle-1; } else { System.out.println ('你要找的数量是' (middle 1) '个) ); 布雷克; }if(lowhigh ) System.out.println ('未找到); 如果搜索数为6,则如下图所示

对半找,就是在找到之前对半继续找

如果low的值大于high的值,则表示整个数组已被扫描,但由于还没有找到要搜索的数量,因此只有找到才能输出

完整的代码如下。

public class search2{ publicstaticvoidmain (string [ ] args ) intarray [ ]=new int [ ] { 1,2,3,4,5,6,7,8,9 } sanner scanner=new scanner (system.in; int key=scanner.nextInt (; int low=0; int high=array.length-1; int middle; wile(high=low ) {middle=) lowhigh )/2; if(Array[middle]key ) { low=middle 1; }elseif(Array[middle]key ) { high=middle-1; } else { System.out.println ('你要找的数量是' (middle 1) '个) ); 布雷克; }if(lowhigh ) System.out.println ('未找到); }总之,我们很清楚暴力搜索算法的时间复杂度是o(n )

折半搜索算法的时间复杂度为o(log2n ) log _2(n ) log2n ) )

因此,阵列中的元素越多,由减半搜索表示的算法的优势越大

在那之后,我终于满足了rzdxlc们。 她们对折半搜索非常满意。 毕竟,这能让她们更快找到漂亮的虾

然后,结果是……

结果支付错了。 rzdxlc又被背叛了。 为什么还要说?

今天的共享到此为止。 下一期再见吧~

本文选自微信公众号onceCode

如果大家喜欢的话请关注公众号

附上微信公众号的链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。