静态表查找

静态查找表是指表结构不是在查询过程中动态生成的,它可分为 顺序查找(无序)、二分查找(有序)、分块查找(索引顺序查找)。

1.顺序查找

时间复杂度(O(n))
public static int seqSearch(int[] array, int key){
	for(int i = 0; i < array.length; i++){
		if(array[i] == key)
			return i;		
	}
	return -1;
}

2.二分查找

时间复杂度(O(log2n))
//非递归实现
public static int binSearch(int[] array, int key){
	int low = 0;
	int high = array.length - 1;
	int mid = 0;
	while(low <= high){
		mid = (low + high)/2;
		if(key == array[mid])
			return mid;
		else if(key > array[mid])
			low = mid + 1;
		else
			high = mid - 1;	
	}
	return -1;
}
//递归实现
public static int binarySearch(int key, int[] array, int low, int high){
	if(low > high)
		return -1;
	if(low <= high){
		int mid = (low >>> 1) + (high >>> 1);
		if(key == array[mid])
			return mid;
		else if(key > array[mid])
			low = mid + 1;
		else
			high = mid - 1;
	}
	return binarySearch(key, array, low, high);
}

3.分块查找

时间复杂度介于顺序查找和二分查找之间

分块查找又称索引顺序查找,它是顺序查找的一种改进方法,性能优于顺序查找。

方法描述:

将n个数据元素“按块有序”划分为m块(一般块的长度均匀,最后一块可以不满)(m<=n),每一块中的节点不必有序,但块与块之间必须“按块有序”;即第一块中的关键字必须小于(或者大于)第二块中的关键字,第二块中的关键字必须小于(或者大于)第三块中的关键字,构造索引表,索引表按关键字有序排列。

如下图所示:


图示为一个索引顺序表,其中包括三个块,第一个块的其实地址为0,快内最大关键字为25;第二个块的其实地址为5,块内最大关键字为58;第三个块的起始地址为10,块内最大关键字为88。

分块查找基本步骤:

Step1、先选取各块中最大关键字构成一个索引表;

Step2、查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值