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

网友投稿 227 2023-06-08


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

java 二分法详解几种方法

二分查找(java实现)

二分查找

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

实现:

1.非递归代码

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]

lo=mid+1;

}else{

hi=mid-1;

}

}

return -1;

}

2.递归实现

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)

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

mid=(low+hi)/2;

if(array[mid]

low=mid+1;

}else{

hi=mid;

}

}

if(array[low]!=a){

return -1;

}else{

return low;

}

}

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

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

if(array[mid]<=a){

low=mid;

}else{

hi=mid-1;

}

}

if(array[low]!=a){

return -1;

}else{

return hi;

}

}

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

lo=mid+1;

}else{

hi=mid-1;

}

}

return -1;

}

2.递归实现

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)

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

mid=(low+hi)/2;

if(array[mid]

low=mid+1;

}else{

hi=mid;

}

}

if(array[low]!=a){

return -1;

}else{

return low;

}

}

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

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

if(array[mid]<=a){

low=mid;

}else{

hi=mid-1;

}

}

if(array[low]!=a){

return -1;

}else{

return hi;

}

}

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

mid=(low+hi)/2;

if(array[mid]

low=mid+1;

}else{

hi=mid;

}

}

if(array[low]!=a){

return -1;

}else{

return low;

}

}

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

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

if(array[mid]<=a){

low=mid;

}else{

hi=mid-1;

}

}

if(array[low]!=a){

return -1;

}else{

return hi;

}

}

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

low=mid+1;

}else{

hi=mid;

}

}

if(array[low]!=a){

return -1;

}else{

return low;

}

}

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

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

int n=array.length;

int low=0;

int hi=n-1;

int mid=0;

while(low

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

if(array[mid]<=a){

low=mid;

}else{

hi=mid-1;

}

}

if(array[low]!=a){

return -1;

}else{

return 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;

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中byte、byte数组与int、long的转换详解
下一篇:Java基础之extends用法详解及简单实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~