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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/benzhaohao/article/details/78942910

二分查找表一定要有序

下面是具体实现代码


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));
	}
}

运行结果


猜你喜欢

转载自blog.csdn.net/benzhaohao/article/details/78942910