zoukankan      html  css  js  c++  java
  • 二分法查找

    二分法的基本思想

    二分查找又称折半查找,首先将表中元素顺序排列。将需要查找的值与数组[mid]比较,若相等,则查找成功并且返回此位置,否则确定新的查找区间,继续二分查找:

    若array[mid]>target,则array[mid]-array[n]均大于target,若表中存在等于target的值,则必定位于array[0]-array[mid]之中,故新的查找区间为array[0]-array[mid]

    若array[mid]<target,则要查找的target必定在array[mid]-array[n]中。

    因此,从初始的查找区间array[0]-array[n]开始,每经过一次与当前查找区间的中点位置上的值的比较确定查找是否成功,不成功则当前的查找区间缩小一半,重复这一过程直到找到目标值或者当前的查找区间为空。

    代码实例

    	  //array目标数组,target待查找值
           public static int BinarySearch(int[] array, int target)
           {
        	   //查找区间[low,high],初次为全部数组
               int low, high, mid;
               low = 0;
               high = array.length - 1;
               while (low <= high)
               {
            	   //中间值位置
                   mid = (low + high) / 2;
                   //中间值小于目标值,将mid的值赋给low,即将区间缩小array[mid]-array[high]
                   if (array[mid] < target)
                   {
                       low = mid + 1;
                   }
                   //中间值大于目标值,将mid的值赋给high,即将区间缩小array[0]-array[mid]
                   else if (array[mid]>target)
                   {
                       high = mid - 1;
                   }
                   //中间值等于目标值,查找成功
                   else{
                       return mid;
                   }
               }
               return -1;
           }
    

     

    二分查找的优点和缺点

    优点:查询次数少,速度快

    缺点:待查表必须是有序表,且插入和删除效率低

    使用范围:适用于不经常变动且查找频繁的有序列表,

    二分查找只适用顺序存储结构。但是在顺序结构里插入和删除数据都必须移动大量的节点。因此,二分查找适用于改动较少,查找较多的数据。

    对于查找少,改动多的数据,可以使用链表存储,进行顺序查找。

  • 相关阅读:
    在博客园安了新家,开心哦!
    ViewState与Session的区别(转)
    什么是web.config .net配置文件介绍
    YUI Grid CSS的优雅设计(转)
    css reset
    Windows、(*)nux回忆录 作为架构师的你 值得拥有 O(∩_∩)O~
    .NET互联网网站架构(非原创)
    重构与设计解析(非原创)
    SQL Server2005索引简介
    mongodb相关
  • 原文地址:https://www.cnblogs.com/minshia/p/6375510.html
Copyright © 2011-2022 走看看