栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二分查找的完善

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二分查找的完善

查找多个元素
  • java

java
package Package01;

import java.util.ArrayList;
import java.util.List;



public class BinarySearch {
    public static void main(String[] args) {
        int arr[] = {1,8,10,89,1000,1234};

        ArrayList resIndex = binarySearch(arr,0,arr.length-1,1);

        System.out.println("resIdex=" + resIndex);

        }


    //二分查找算法
    

    public static ArrayList binarySearch(int[] arr, int left, int right, int findVal){
        if (left > right) {
            return new ArrayList();
        }

        int mid = (left+right)/2;
        int midVal = arr[mid];

        if(findVal > midVal){
            //向右递归
            return binarySearch(arr,mid+1,right,findVal);

        }else if(findVal < midVal){
            return binarySearch(arr,left,mid-1,findVal);
        }else{
            
//            return mid;
             ArrayList resIndexList = new ArrayList();

             //向mid的索引值的左边扫描
            int temp = mid-1;
            while(true){

                if(temp<0 || arr[temp]!=findVal){

                    //退出
                    break;
                }
                //否则,就temp放入集合中
                resIndexList.add(temp);
                temp -= 1;  //temp左移

            }
            resIndexList.add(mid);
            //向mid的索引值的右边扫描

            temp = mid+1;
            while(true){
                if(temp> arr.length-1 || arr[temp]!=findVal){
                    break;
                }
                resIndexList.add(temp);
                temp += 1;
            }
            return resIndexList;


        }

    }



    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号