数表的查找

本文介绍了几种不同的数组查找算法:顺序查找、二分查找、插值查找和斐波那契查找。顺序查找是最基础的,适合任意排列的数组。二分查找效率较高,前提是对数组进行预排序。插值查找和斐波那契查找则在有序数组中进一步优化了查找效率,分别根据关键字分布和斐波那契数列调整查找步长。文章还给出了相应的代码实现。
摘要由CSDN通过智能技术生成

 

一、顺序查找(Sequential Search)

顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术。

顺序查找的过程:从表中第一个( 或最后一个)开始,逐个记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果知道最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。

代码实现:

/**
	 * 顺序查找
	 * @param arr 数组
	 * @param key 要查找的数
	 * @return 返回找的值的索引,没找到返回 -1 
	 */
public int Sequential_Search(int[] arr,int key){
		int i;
		for( i = 0 ; i < arr.length ; i++ ){
			if(arr[i] == key){
				return i;
			}
		}
		return -1;
		
	}
}

以上代买为最简单的顺序查找,但并不完美,因为每次循环都要判断 i 是否越界,我们可以使用一个更好的办法,设置一个哨兵,这样就不需要每次都让 i 与 arr.length 比较。

/**
	 * 顺序查找--优化
	 * @param arr 数组
	 * @param key 要找的值
	 * @return 返回索引,为找到返回 -1 
	 */
	public int Sequential_Search(int[] arr,int key){
		int i;
		i = arr.length-1;
		int first = arr[0];  // 将第一位数给first,以便后边比较使用
		arr[0] = key;   // 设置arr[0]为关键字,即“哨兵”
		while(arr[i] != key){
			i--;
		}
		//因为key占用了arr[0]的位置,所以如果i=0时,需判断此时是否相等
		if(i == 0){
			if(first == key)
				return i;  //相等返回索引
			else
				return -1; // 不等返回 -1,即未找到
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值