分块查找代码实现
public class 分块查找 {
public static void main(String[] args) {
int array[]={16,5,9,12,21,18,
32,23,37,26,45,44,
50,48,61,52,73,66};
//创建3个块的对象
block block1 = new block(21, 0, 5);
block block2 = new block(45, 6, 11);
block block3 = new block(73, 13, 17);
//定义一个数组来管理索引表
block[] blockarray ={block1,block2,block3};
int number=37;
//索引表
int index= getIndex(blockarray,array,number);
System.out.println(index);
}
private static int getIndex(block[] blockarray, int[] array, int number) {
int index = findIndex(blockarray, number);
if (index==-1){
return -1;
}
//获取起始索引和结束索引
int startIndex=blockarray[index].getStartIndex();
int endIndex=blockarray[index].getEndStart();
for (int i = startIndex; i <=endIndex; i++) {
if (array[i]==number){
return i;
}
}
return -1;
}
//索引表
private static int findIndex(block[] block,int number){
for (int i = 0; i <block.length ; i++) {
if (number<block[i].getMax()){
return i;
}
}
return -1;
}
}
class block{
private int max;//最大值
private int startIndex;//起始索引
private int endStart;//结束索引
public block(int i, int i1, int i2) {
this.max = i;
this.startIndex = i1;
this.endStart = i2;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public int getEndStart() {
return endStart;
}
public void setEndStart(int endStart) {
this.endStart = endStart;
}
}