博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态表查找
阅读量:4299 次
发布时间:2019-05-27

本文共 1241 字,大约阅读时间需要 4 分钟。

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

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

你可能感兴趣的文章
python的单例理解、__new__、新式类object以及python2和python3下__new__的区别。
查看>>
OpenStack Mitaka keystone 分页(pagination)实现
查看>>
OpenStack删除Cinder盘失败解决办法
查看>>
Linux cpu 详解
查看>>
GitHub + Hexo 搭建个人博客
查看>>
Linux Ubuntu 修改网卡名字
查看>>
OpenStack Ocata Horizon 开发(一)—— 快速开始
查看>>
自定义Horizon
查看>>
Django 源码阅读:服务启动(wsgi)
查看>>
Django 源码阅读:url解析
查看>>
第三轮面试题
查看>>
Docker面试题(一)
查看>>
第四轮面试题
查看>>
第一轮面试题
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>
消息队列2
查看>>
消息列队3
查看>>
C#中发送消息给指定的窗口到消息循环
查看>>