查找算法(Java随笔)—顺序查找&二分查找

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

查找(Search):指的是从一批记录中找出满足指定条件的某一纪录的过程,又叫检索,一个有效的查找算法往往可以提高程序的执行效率。

在实际中,针对不同的情况可以选择不同的查找算法:

  • 对无顺序的数据,只有进行逐个查找比较数据,即顺序查找。
  • 对有顺序的数据,也可以采用顺序查找,但可以采用更好的更快速的方法。
  • 对于一些特殊的数据结构,如链表,树,图等,都有相对应的查找算法。

顺序查找:顺序查找法很简单,就是从数据的第一个元素开始,从头至未依次逐个查找,直到查找到所要的数据或搜索完整个数据序列,顺序查找主要用于量较少,无规则的数据。

顺序查找算法实例——代码实现:

//顺序查找法——数字实例
	int sSearch(int[] data,int d){
		for(int i=0;i<data.length ;i++){
			if(data[i]==d){
				return i;
			}
		}
		return -1;
	}

二分查找(Binary Search):又叫折半算法,要求数据序列呈线性结构,也就是经过排序的,因此在使用二分法查找数据之前,必须对数据序列进行排序。

二分法中涉及到三个变量,分别是数组元素的开始(start),中间(mid),结束(end),第一步是将要查找的数据与中间值比较,如果比中间值小,表示要查找的数据在数组的左半部分,缩小查找范围为0~(mid-1),更新中间值,再次进行比较......

二分查找算法实例——代码实现:

//二分查找法
	int binarySearch(int[] data,int d){
		int start=0;
		int end=data.length-1;
		int mid;//中间值
		//假设数组是按从小到大顺序排列的
		while(start<=end){
			mid=(end-start)/2+start;
			//找到数据,返回位置
			if(d==data[mid]){
				return mid;
			}
			//如果数据比中间值小,设置查找范围为中间值左边
			if(d<data[mid]){
				end=mid-1;
			}
			//如果数据比中间值大,设置查找范围为中间值右边
			if(d>data[mid]){
				start=mid+1;
			}
		}
		return -1;
	}

猜你喜欢

转载自blog.csdn.net/qq_40780805/article/details/82919710