您的位置:首页 > 编程语言 > Java开发

java实现顺序,二分,分块查找

2017-12-31 19:46 447 查看
二分查找表一定要有序

下面是具体实现代码

import java.util.*;

public class search {
//顺序查找
public static int seqsearch(int[]a,int keytype){
if(a.length>0){
for(int i=0;i<a.length;i++){
if(a[i]==keytype) //若查找成功,则返回元素下标i
return i;
}
}
return -1; //若查找不成功,返回-1;
}
//二分查找,查找表必须有序
public static int binarysearch(int[]a,int keytype){
if(a.length>0){
int low=0,high=a.length-1; //查找范围的上界和下界
while(low<=high){
int mid=(low+high)/2; //中间位置,当前比较的数据元素位置
if(a[mid]==keytype) //若查找成功,返回元素下标mid
return mid;
else if(a[mid]<keytype) //中间元素比给定值小
low=mid+1; //查找范围缩小到后半段
else //中间元素比给定值大
high=mid-1; //查找范围缩小到前半段
}
}
return -1; //查找不成功,返回-1
}
//分块查找
//index代表索引数组,st2代表待查找数组,keytype代表要查找的元素,m代表每块大小
public static int blocksearch(int[] index,int[]st2,int keytype,int m){
int i=shunxusearch(index,keytype); //shunxunsearch函数返回值为带查找元素在第几块
System.out.println("在第"+i+"块");
if(i>=0){
int j=m*i; //j为第i块的第一个元素下标
int curlen=(i+1)*m;
for(;j<curlen;j++){
if(st2[j]==keytype)
return j;
}
}
return -1;

}
public static int shunxusearch(int[]index,int keytype){
if(index[0]>keytype){ //如果第一块中最大元素大于待查找元素
return 0; //返回0.即待查找元素在第0块
}
int i=1;
while((index[i-1]<keytype)&&(index[i]>keytype))
return i;
return -1;
}
public static void main(String args[]){
int st1[]={1,2,3,4,5,6,7,8,9,10};
System.out.println("顺序查找,输入要查找的关键字");
Scanner sc1=new Scanner(System.in);
int keytype1=sc1.nextInt();
System.out.println("关键字在第"+seqsearch(st1,keytype1)+"个位置");
System.out.println("二分查找,输入要查找的关键字");
Scanner sc2=new Scanner(System.in);
int keytype2=sc2.nextInt();
System.out.println("关键字在第"+binarysearch(st1,keytype2)+"个位置");
int index[]={22,48,86};
int st2[]={22, 12, 13, 8, 9, 20, 33, 42, 44, 38, 24, 48, 60, 58, 74, 49, 86, 53};
System.out.println("分块查找");
System.out.println(blocksearch(index,st2,44,6));
}
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐