数据结构——查找

Posted wgblog-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——查找相关的知识,希望对你有一定的参考价值。

1、顺序查找:

定义:

顺序查找(Sequential Search) 又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找不成功。

 

代码:

import java.util.Scanner;

import org.junit.jupiter.api.Test;

/**
 * 顺序查找
 * @author wydream
 *
 */

public class SequelSearch 
	
	public int search(int[] arr,int num) 
		if(arr.length==0) 
			return -1;
		
		for(int i=0;i<arr.length;i++) 
			if(arr[i]==num) 
				return i;
			
		
		return -1;
	

	@Test
	public void test() 
		int[] arr=4,6,2,8,1,9,0,3;
		Scanner input=new Scanner(System.in);
		System.out.println("请输入你要查找的数:");
		int num=input.nextInt();
		int result=search(arr,num);
		if(result==-1)
	        System.out.println("你输入的数不存在与数组中");
	    
	    else 
	    	System.out.println("你输入的数字存在,在数组中的位置是第:"+(result+1)+"个");
	    
	         
		
	

  

 

2、折半查找(二分查找)

定义:

折半查找(Binary Search) 技术,又称为:二分查找。它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所查找区域无记录,查找失败为止

 

代码:

import org.junit.jupiter.api.Test;

/**
 * 二分查找
 * 1.循环实现
 * 2.递归实现
 * @author wydream
 *
 */

public class BinarySearch 
	
	//1.循环实现二分查找
	public int rank(int[] arr,int num) 
		int start=0;
		int end=arr.length;
		int mid=(start+end)/2;//中间数的下标
		while(start<=end) //退出循环的条件  若一直没找到这个数,则会退出循环
			if(arr[mid]==num)
				return mid;
			else if(arr[mid]>num) 
				end=mid-1;
			else 
				start=mid+1;
			
			mid=(start+end)/2;
		
		return -1;
	
	
	//2.递归实现二分查找
	public int recursion(int[] arr,int num,int start,int end) 
		int mid=(start+end)/2;
		if(start==end&&arr[mid]!=num) 
			return -1;
		
		if(arr[mid]==num) 
			return mid;
		else 
			if(arr[mid]>num) 
				end=mid-1;
				return recursion(arr,num,start,end);
			else
				start=mid+1;
				return recursion(arr,num,start,end);
			
		
		
	
	
	//测试
	@Test
	public void testRank() 
		int[] arr= 2,3,6,9,13,18,20,22,24,29,30,45,67,88;
		int result=rank(arr,2);
		if(result==-1) 
			System.out.println("你要查找的数字不在该数组中");
		else 
			System.out.println("你查找的数字在数组的第"+(result+1)+"位");
		
	
	
	@Test
	public void testRecursion() 
		int[] arr= 2,3,6,9,13,18,20,22,24,29,30,45,67,88;
		int result=recursion(arr,20,0,arr.length-1);
		if(result==-1) 
			System.out.println("你要查找的数字不在该数组中");
		else 
			System.out.println("你查找的数字在数组的第"+(result+1)+"位");
		
	


  

 

以上是关于数据结构——查找的主要内容,如果未能解决你的问题,请参考以下文章

学习数据结构笔记 ---查找算法(线性查找,二分查找,插值查找,斐波那契查找)

5查找——数据结构基础篇

王道数据结构7(查找)

数据结构与算法:查找

数据结构(查找)

数据结构(查找)