• 45-二分查找实现


    摘自:https://blog.csdn.net/maoyuanming0806/article/details/78176957

    二分查找是一种查询效率非常高的查找算法。又称折半查找

    起初在数据结构中学习递归时实现二分查找,实际上不用递归也可以实现,毕竟递归是需要开辟额外的空间的来辅助查询。本文就介绍两种方法

    二分查找算法思想

    有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。


    一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

    二分查找图示说明

    二分查找优缺点


    优点是比较次数少,查找速度快,平均性能好;

    其缺点是要求待查表为有序表,且插入删除困难。

    因此,折半查找方法适用于不经常变动而查找频繁的有序列表。


    使用条件:查找序列是顺序结构,有序。

    一下为两种实现方法:

    import java.util.Scanner;
    
    public class Main{
    //	public static int [] a = new int[20];
    	
    	public static void main(String[] args){
    		
    		Scanner cin = new Scanner(System.in);
    		int a[] = {1,3,5,7,9,11,22};
    		
    		int len = 5;
    		
    		int w = erfen(a, 0, 5, 6);
    		int w2 = erfen2(a, 0, 5, 6);
    		
    		System.out.println(w);
    		System.out.println(w2);
    		
    	}
    	
    	// 二分查找:递归版
    	public static int erfen(int[] a, int left, int right, int key) {
    		int mid = left + (right - left) / 2; // 这样可以避免 (left + right)益出现象
    		if(key < a[left] || key > a[right] || left > right){
    			return -1;				
    		}
    //		System.out.println(a[mid]);
    		if(a[mid] == key) {
    			return mid;
    		}
    		else if(a[mid] > key){
    			return erfen(a, left, mid - 1, key);
    		}
    		else {
    			return erfen(a, mid + 1, right, key);
    		}
    	}
    	
    	// 用循环做二分查找
    	public static int erfen2(int[] a, int left, int right, int key) {
    		int mid;
    		
    		while(left <= right) {
    			mid = left + (right - left) / 2;
    			if(key == a[mid]) {
    				return mid;
    			}
    			else if(key < a[mid]) {
    				right = mid - 1;
    			}
    			else {
    				left = mid + 1;
    			}
    		}
    		
    		return -1;
    	}
    	
    }
    
    /*
     
    
    */
    

      

  • 相关阅读:
    $.each
    KBASP.NET 2.0 網站部署的變革
    详尽解析window.event对象
    Jquery1.2.6 源码分析
    索引学习2聚族索引、非聚族索引、组合索引
    在C#中使用WIA获取扫描仪数据
    Adobe Photoshop CS5简体中文版+完美破解方法
    j2me开发图片加载
    数据库操作
    WPF之DataGrid应用
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/10503838.html
Copyright © 2020-2023  润新知