首页 > 编程知识 正文

数据结构二分查找程序,java二分查找算法代码

时间:2023-05-04 04:31:54 阅读:128905 作者:2576

顺序搜索原理按顺序比较特定元素和序列中的元素,直到找到与特定关键字相同的元素,或者同时比较序列中的元素。

代码实现//顺序搜索代码实现在找到满意的值时显示publicclassseqsearch { publicstaticvoidmain (string [ ] args ) int [ ] arr={ 12,9,- 9,7770 intindex=序列搜索(arr,-9); if(index==-1 ) { System.out.println ('找不到); }发现}else { System.out.println ('下标为' index ); } publicstaticintsequencesearch (int [ ] arr,int value ) /遍历数组查找for ) intI=0; i arr.length; I ) (/如果找到,则为下标if(arr[I]==value ) ) {返回I; //如果找不到,返回- 1返回- 1; }运行结果

算法分析优点:

对检测序列(表)无要求的——检测对象序列可以有序,也可以无序; 从第一个元素开始。如果必须逐个遍历整个要检查的序列(除非找到),但找不到最后一个元素,则搜索失败。缺点:低效——等待检验序列时间复杂度:

o(n ),平均寻道时间=列表长度/2

空间复杂度:

一个待检序列一个目标元素=o(n ) ) ) ) ) ) ) ) ) ) ) ) )。

二分搜索二分搜索又称折半搜索(Binary Search ),是一种高效的搜索方法。 但是,在往返搜索中,路线表必须是顺序存储结构,表中的元素必须按关键字排序。

在原理分析中,首先确定数组中间的下标mid=(leftright )/2。 然后,将需要查找的数量的value与arr[mid]进行比较。 valuearr[mid]表示要搜索的数量位于mid的右侧,因此必须递归向右搜索。 valuearr[mid]表示要搜索的数量在mid的左侧,因此必须递归地向左搜索。 找到value==arr[mid]说明后,返回。 什么时候结束递归?

1 )找到后结束递归。

2 )递归完整数组,如果尚未找到value,需要退出递归并成为left right,则必须退出。

代码实现//二分查找: publicclassbinarysearch { publicstaticvoidmain (string [ ] args )//数组int [ ] arr={-} if(resultindex==-1 ) { System.out.println (找到的值不在数组中) }; }发现}else { System.out.println ('下标为' resultIndex ' ); }//left左侧的索引right右侧的索引value要搜索的值publicstaticintbinarysearch (int [ ] arr、int left、int right、int value ) /递归(//中间索引和值intmid=)左右)/2; int midValue=arr[mid]; if(valuemidvalue(//右递归returnbinarysearch(arr,mid 1,right,value ) ); }elseif(valuemidvalue ) (//向左递归返回returnbinarysearch ) arr,left,mid-1,value ); else {返回mid; }}运行结果

算法分析优点

比较次数少,检索速度快,平均性能好;缺点

要求核对表规则,插入删除困难。 因此,混叠搜索方法适于在不频繁改变的情况下搜索频繁有序列表。

时间复杂度:

最坏的情况是两种方式的时间复杂度相同。 o(log2n )最佳情况为o )1)空间复杂度:

非递归方式:辅助空间为常数级,因此空间复杂度为o(1);

递归方式:递归的次数和深度都为log2 N,每次所需的辅助空间为常数级:

空间复杂性: o(log2n ) ) ) )。

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