Java怎么实现二分查找的变种

  介绍

小编给大家分享一下Java怎么实现二分查找的变种,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

Java的优点是什么

1。简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2。面向对象;3。分布性,Java是面向网络的语言;4。鲁棒性、java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。5。安全性,用于网络,分布环境下的Java必须防止病毒的入侵。6。体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7。可移植性、Java可以方便地移植到网络上的不同机器。8。解释执行,Java解释器直接对Java字节码进行解释执行。

具体内容如下

<>强普通二分查找:

先回顾一下普通的二分查找

注意:二分查找有这样一个问题:当数组中数有重复时,比如{3,3,3,3}这个数组,二分查找3时,返回的是加勒比海盗[1],也就是说二分查找并不会返回3第一次出现的位置0。

public  class  BinarySearch  {   public 才能static  & lt; T  extends  Comparable<?, super  T>祝辞,int 搜索(T  arr [], T 价值),{   ,,,int  left =, 0;   ,,,int  right =, arr.length 作用;1;   ,,,while  (left  & lt;=,右),{   ,,,,,int  mid =, (left ,,右),+,((^ left 右),在祝辞,1);   ,,,,,if  (arr(中期).compareTo(值),==,0),{   ,,,,,,,return 中期;   ,,,,,},else  if  (arr(中期).compareTo(值),祝辞,0),{   ,,,,,,,right =, mid 作用;1;   ,,,,,},{else    ,,,,,,,left =, mid  +, 1;   ,,,,,}   ,,,}   ,,,return  1;   ,,}   ,   public 才能;static  void  main (String [], args), {   ,,,整数[],arr =, new 整数[]{1,,3,,3,,6日,7日,9};   ,   ,,,//1   ,,,System.out.println(搜索(加勒比海盗,0));   ,   ,,,//0   ,,,System.out.println(搜索(加勒比海盗,1));   ,   ,,,//5   ,,,System.out.println(搜索(加勒比海盗,9));   ,   ,,,//1   ,,,System.out.println(搜索(加勒比海盗,10));   ,   ,,,//2   ,,,System.out.println(搜索(加勒比海盗,3));   ,,}   }

<强>二分变种:findFirst函数

在普通二分查找中,在(左....右)左闭右闭区间中查找,如果找到了值为价值的元素就认为找到了。而在这个findFirst函数中就不是如此,在[左....右)左闭右闭区间中查找,当找到值等于价值的元素后,不是让右=1,中期而是让右=中期,继续在[左....正确的)左闭右闭区间中查找。最终左==右时就退出循环。

退出循环后可能找到值了值,也有可能是循环遍历完整个数组后都没找到价值,而退出循环。

所以退出循环后还要在判断一下是那种情况。

public  class  BinarySearch  {   public 才能static  & lt; T  extends  Comparable<?, super  T>祝辞,int  findFirst (T  arr [], T 价值),{   ,,,int  left =, 0;   ,,,int  right =, arr.length 作用;1;   ,,,//当left>=正确时退出,这里的"="情况与二分不同   ,,,while  (left  & lt;,右),{   ,,,,,int  mid =,(时间+ left 右),在祝辞,1;   ,,,,,if  (arr(中期).compareTo(值),& lt;, 0), {   ,,,,,,,left =, mid  +, 1;   ,,,,,},{else    ,,,,,,,right =,中期;   ,,,,,}   ,,,}   ,,,//,上面循环遍历完后。是找到值了价值?还是没找到价值值?判断一下。   ,,,if  (arr(左),==,值),{   ,,,,,return ;   ,,,},{else    ,,,,,return  1;   ,,,}   ,,}   ,   public 才能;static  void  main (String [], args), {   ,,,整数[],arr =, new 整数[]{1,3,3,3,3,3,3,3,3,3,6日,7日,9};   ,   ,,,//1   ,,,System.out.println (findFirst(加勒比海盗,0));   ,   ,,,//0   ,,,System.out.println (findFirst(加勒比海盗,1));   ,   ,,,//12   ,,,System.out.println (findFirst(加勒比海盗,9));   ,   ,,,//1   ,,,System.out.println (findFirst(加勒比海盗,10));   ,   ,,,//1   ,,,System.out.println (findFirst(加勒比海盗,3));   ,,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java怎么实现二分查找的变种