java 二分法详解几种实现方法

2025-05-29 0 63

java 二分法详解几种方法

二分查找(java实现)

二分查找

算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

实现:

1.非递归代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
public static int biSearch(int []array,int a){

int lo=0;

int hi=array.length-1;

int mid;

while(lo<=hi){

mid=(lo+hi)/2;

if(array[mid]==a){

return mid+1;

}else if(array[mid]<a){

lo=mid+1;

}else{

hi=mid-1;

}

}

return -1;

}

2.递归实现

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14
public static int sort(int []array,int a,int lo,int hi){

if(lo<=hi){

int mid=(lo+hi)/2;

if(a==array[mid]){

return mid+1;

}

else if(a>array[mid]){

return sort(array,a,mid+1,hi);

}else{

return sort(array,a,lo,mid-1);

}

}

return -1;

}

时间复杂度为 O(logN)

查找第一个元素出现的位置(元素允许重复)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
public static int biSearch(int []array,int a){

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low<hi){

mid=(low+hi)/2;

if(array[mid]<a){

low=mid+1;

}else{

hi=mid;

}

}

if(array[low]!=a){

return -1;

}else{

return low;

}

}

查询元素最后一次出现的位置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
public static int biSearch(int []array,int a){

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low<hi){

mid=(low+hi+1)/2;

if(array[mid]<=a){

low=mid;

}else{

hi=mid-1;

}

}

if(array[low]!=a){

return -1;

}else{

return hi;

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://www.cnblogs.com/coderising/p/5708632.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 二分法详解几种实现方法 https://www.kuaiidc.com/118375.html

相关文章

发表评论
暂无评论