标签:res 线性查找 基本 java 测试 i++ amp dream 它的
顺序查找(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)+"个"); } } }
折半查找(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)+"位"); } } }
标签:res 线性查找 基本 java 测试 i++ amp dream 它的
原文地址:https://www.cnblogs.com/wgblog-code/p/11231637.html