码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构——查找

时间:2019-07-23 15:27:33      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:res   线性查找   基本   java   测试   i++   amp   dream   它的   

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)+"位");
		}
	}

}

  

 

数据结构——查找

标签:res   线性查找   基本   java   测试   i++   amp   dream   它的   

原文地址:https://www.cnblogs.com/wgblog-code/p/11231637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!