zoukankan      html  css  js  c++  java
  • java学习之查找

    在一组数据当中我们取出一个我们想要的数据的过程,谓之查找。

    1、简单查找:

      需求:在一组数据当中找到你想要的一个数据,并且返回该数据在数组当中的索引。

      思路:循环遍历整个数组,然后拿各个元素与所要找出的数字做比较,如果相等返回该位置的索引,相反如果查找完之后,仍没有找到数据,此时就返回-1,表示该数据不再数组当中。

      代码:

    class SimpleFind
    {
    		
    	public static void main(String [] args)
    	{
    
    		int[] arr = {1,3,89,43,6,80};
    		System.out.print(simpleFind(arr,3));
    
    	}
    
    	public static int simpleFind(int [] arr,int key)
    	{
    
    		for(int i = 0; i<arr.length ; i++)
    		{
    
    			if(arr[i] == key)
    				return i;
    			continue;
    
    		}	
    
    		return -1;
    
    	}
    
    }
    

      但是这种方法相对来说有些低效,下面我们介绍一种比较高效的一种方法。

      思路:假如现在我们要查找一个数在一个已经排序好了的数组中。较之第一种方法,我们先拿我们要找的数字与数组中间的数字做比较,如果数字大于中间的数字,此时我们数字肯定不再中间数字的左边了,但是可能存在于数字右边。我们再拿要找的数字与右边一半的数字做比较,如果大于则继续查找右边的那一半,否则查找左边的另一半。周而往复,直至查找到,返回索引值,否则返回-1,表示数组当中不存在这个数字。

      

      

    class BinarySearch
    {
    	
    	public static void main(String[] args)
    	{
    
    		int[] arr = {1,4,7,8,13,24,56,99};
    		//System.out.print(binarySearch(arr,13));
    		System.out.print(binarySearch2(arr,56));
    
    	}
    
    	public static int binarySearch(int[] arr, int key)
    	{
    
    		int mid = (arr.length-1)>>>1;
    		//System.out.print(mid);
    		int min = 0;
    		int max = arr.length-1;
    		//System.out.print(min<max);
    		while(min<=max)
    		{
    			if(arr[mid]>key){
    				max = mid-1;
    				mid = (min+max)>>>1;
    			}else if(arr[mid]<key){
    				min = mid+1;
    				mid = (max+min)>>>1;
    			}else{
    				return mid;
    			}
    			//System.out.println("min = "+min+" "+"max = "+max);
    
    		}
    		return -1;
    
    	}
    	public static int binarySearch2(int[] arr, int key)
    	{
    
    		int mid = (arr.length-1)>>>1;
    		//System.out.print(mid);
    		int min = 0;
    		int max = arr.length-1;
    		//System.out.print(min<max);
    		while(arr[mid] != key)
    		{
    			if(arr[mid]>key){
    				if(max<min)
    					return -1;
    				max = mid-1;
    				mid = (min+max)>>>1;
    			}else{
    				if(max<min)
    					return -1;
    				min = mid+1;
    				mid = (max+min)>>>1;
    			}
    			//System.out.println("min = "+min+" "+"max = "+max);
    		}
    		return mid;
    
    	}
    }
    

      

  • 相关阅读:
    网盘搜索网站汇总
    AutoIt3病毒杀毒攻略(详)
    数据库的逻辑结构设计
    Oracle数据类型
    选择ORACLE数据库字符集
    ETL讲解(很详细!!!)
    Oracle左连接,右连接,全外连接和+号的用法
    Oracle用户创建及权限设置
    内连接、外连接、自然连接
    关系数据库关系代数
  • 原文地址:https://www.cnblogs.com/sunchuanzhen/p/3325639.html
Copyright © 2011-2022 走看看