实现步骤:
1.创建数组blockArr存放每一块对象的信息
2.先查找blockArr确定要查找的数据属于那一块
3.在单独遍历这一块数据即可
public class BlockSearchDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
实现步骤:
1.创建数组blockArr存放每一块对象的信息
2.先查找blockArr确定要查找的数据属于那一块
3.在单独遍历这一块数据即可
*/
int arr[]= {16,5,9,12,21,18,
32,23,37,26,45,34,
50,48,61,52,73,66};
//创建三个快的对象
Block b1=new Block(21,0,5);
Block b2=new Block(45,6,11);
Block b3=new Block(73,12,17);
Block[] blockArr= {b1,b2,b3};
int number=18;
int index=getIndex(blockArr, arr, number);
System.out.println(index);
}
private static int getIndex(Block[] blockArr,int arr[],int number) {
//1.确定number实在那一块当中
int indexBlock=findIndexBlock(blockArr,number);
if(indexBlock==-1) {
return -1;
}
//2.获取这一块的起始索引和结束索引
//Block b1=new Block(21,0,5);
//Block b2=new Block(45,6,11);
//Block b3=new Block(73,12,17);
int startIndex=blockArr[indexBlock].getstartIndex();
int endIndex=blockArr[indexBlock].getendIndex();
//3.遍历
for(int i=startIndex;i<=endIndex;i++) {
if(arr[i]==number) {
return i;
}
}
return -1;
}
public static int findIndexBlock(Block[] blockArr,int number) {
//从0索引开始遍历blockArr,如果number小于max,那么就表示number是在这一块中的
for(int i=0;i<blockArr.length;i++) {
if(number<blockArr[i].getMax()) {
return i;
}
}
return -1;
}
}
//创建标准的Block的javaBean类
class Block{
private int max;
private int startIndex;
private int endIndex;
public Block() {
}
public Block(int max, int srartIndex, int endIndex) {
this.max=max;
this.startIndex=startIndex;
this.endIndex=endIndex;
}
public void setMax(int max) {
this.max=max;
}
public int getMax() {
return max;
}
public void setstartIndex(int startIndex) {
this.startIndex=startIndex;
}
public int getstartIndex() {
return startIndex;
}
public void setendIndex(int endIndex) {
this.endIndex=endIndex;
}
public int getendIndex() {
return endIndex;
}
}