块查找

本文介绍了一种分块查找算法的实现方式,该算法将数组分成多个无序块,但块间保持有序,并通过创建索引提高搜索效率。示例代码展示了如何在Java中实现这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.ArrayList;
import java.util.Iterator;

public class blockSearch {

    public static void main(String[] args) {
        //创建数组,分块查找的数组,数组内部无序,块之间有序
        int []array={3,4,1,2,10,9,7,8,15,12,16,18};
        ArrayList<ArrayList<Integer>> b=new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer>b1=new ArrayList<Integer>();
        ArrayList<Integer>b2=new ArrayList<Integer>();
        ArrayList<Integer>b3=new ArrayList<Integer>();
        b1.add(3);b1.add(4);b1.add(1);b1.add(2);
        b2.add(10);b2.add(9);b2.add(7);b2.add(8);
        b3.add(15);b3.add(12);b3.add(16);b3.add(18);
        b.add(b1);b.add(b2);b.add(b3);
        int block=b.toArray().length;
        //创建索引表,找到b1,b2,b3中的最大值作为索引
        int[]index={4,10,18};
        int num=7;
        int iindex=-1;
        int findex=1;
        for(int i=0;i<index.length;i++){
            if(num<=index[i]){
                iindex=i;
                break;
            }
        }
        //iindex是从0开始,所以是第0块开始算的
        Iterator iterator=b.get(iindex).iterator();
        while(iterator.hasNext()){
            if((Integer)iterator.next()==num){
                System.out.println("在第"+iindex+"块第"+findex+"个");
                return;
            }
            findex++;
        }
        System.out.println("未找到该数");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值