数据结构——查找
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)+"位");
以上是关于数据结构——查找的主要内容,如果未能解决你的问题,请参考以下文章