概述
分块查找要求把一个数据分为若干块,每一块里面的元素可以是无序的,但是块与块之间的元素需要是有序的。(对于一个非递减的数列来说,第i块中的每个元素一定比第i-1块中的任意元素大)
分块查找的实现代码如下:
package com.threeTop.www;
import java.util.ArrayList;
/***
* 分块查找的实现
* @author wjgs
*
*/
public class BlockSearch {
private
int[] index; //建立索引
private
ArrayList[]list;
/**
*
初始化索引表
* @param index
*/
public BlockSearch(int []index)
{
if(index!=null&&index.length!=0)
{
this.index=index;
this.list=new ArrayList[index.length];
for(int i=0;i<list.length;i++)
{
list[i]=new ArrayList();//初始化容器
}
}else
{
throw new Error("index cannot be null or empty");
}
}
/**
* 插入元素
* @param value
*/
public void insert(int value)
{
int i=binarysearch(value);
list[i].add(value);
}
/**
* 二分查找
* @param value
* @return
*/
private int binarysearch(int value) {
// TODO Auto-generated method stub
int start=0;
int end=index.length;
int mid=-1;
while(start<=end)
{
mid=(start+end)/2;
if(index[mid]>value)
{
end=mid-1;
}
else
{
//如果相等,也插入后面
start=mid+1;
}
}
return start;
}
/**
* 查找元素
* @param data
* @return
*/
public boolean search(int data)
{
int i=binarysearch(data);
for(int j=0;j<list[i].size();j++)
{
if(data==(int)list[i].get(j))
{
System.out.println(String.format("查找元素为第: %d块
第%d个 元素",
i+1,j+1));
return true;
}
}
return false;
}
/**
* 打印每块元素
*
*/
public void printAll()
{
for(int i=0;i<list.length;i++)
{
ArrayList l=list[i];
System.out.print("ArrayList"+i+":");
for(int j=0;j<l.size();j++)
{
System.out.print(l.get(j)+"
");
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int []index={10,20,30};
BlockSearch blocksearch=new BlockSearch(index);
blocksearch.insert(1);
blocksearch.insert(12);
blocksearch.insert(22);
blocksearch.insert(9);
blocksearch.insert(18);
blocksearch.insert(23);
blocksearch.insert(5);
blocksearch.insert(15);
blocksearch.insert(27);
blocksearch.printAll();
System.out.println(blocksearch.search(18));
System.out.println(blocksearch.search(29));
}
}
最后
以上就是沉静冰淇淋为你收集整理的查找---分块查找的全部内容,希望文章能够帮你解决查找---分块查找所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复