二分查找

首页 » 算法 » 二分查找
package 查找;

import java.util.ArrayList;

public class 二分查找 {
public static void main(String[] args) {
 int []a= {1,2,2,4,5,6};
 ArrayList<Integer> list=erfen(a,0,a.length-1,2);
 System.out.println(list);
}
static ArrayList<Integer> erfen(int []a,int left,int right,int flag) {
 if(right<left)
 {
  System.out.println(-1);
  return null;
 }
 int mid2=(left+right)/2;//二分查找,适用于不均匀的数
 int mid=left+(right-left)*(flag-a[left])/(a[right]-a[left]);//插值查找适用于连续的数
 if(a[mid]>flag) {//左递归
  return erfen(a,left,mid-1,flag);
 }
 else if(a[mid]<flag) {//右递归
  return erfen(a,mid+1,right,flag);
 }
 else {//找到
  ArrayList<Integer> list=new ArrayList<Integer>();
  int tmp=mid-1;
  while(true) {
   if(a[tmp]!=flag || tmp<0) {
    break;
   }
   list.add(tmp);
   tmp--;
  }
  list.add(mid);
  int tmp2=mid+1;
  while(true) {
   if(a[tmp2]!=flag || tmp2>a.length-1) {
    break;
   }
   list.add(tmp2);
   tmp2++;
  }
  return list;
 }
}
}
分享到:
赞(0) 打赏

评论 7

评论前必须登录!

 

  1. #1

    最好再详细点

    渣渣辉8个月前 (03-27)
  2. #2

    以后多多交流

    中国加油小子8个月前 (03-27)
  3. #3

    记住这个网站了

    我是你哥8个月前 (03-27)
  4. #4

    笨鸟先飞8个月前 (03-28)
  5. #5

    我给你点赞了

    你哥6个月前 (05-26)
  6. #6

    奥利给

    我是你哥6个月前 (05-26)
  7. #7

    我给你点赞了

    小蚯蚓6个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00