• 二分查找算法(递归与非递归两种方式)


    首先说说二分查找法。

    二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标。


    采用非递归方式完成二分查找法。java代码如下所示。

    1.     /* 
    2.      * 非递归二分查找算法 
    3.      * 参数:整型数组,需要比较的数. 
    4.      */  
    5.     public static int binarySearch(Integer[]srcArray,int des){  
    6.         //第一个位置.  
    7.         int low=0;  
    8.         //最高位置.数组长度-1,因为下标是从0开始的.  
    9.         int high=srcArray.length-1;  
    10.         //当low"指针"和high不重复的时候.  
    11.         while(low<=high){  
    12.             //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2  
    13.             int middle=low+((high-low)>>1);  
    14.         //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.  
    15.         if(des==srcArray[middle]){  
    16.             return middle;  
    17.         //如果小于的话则移动最高层的"指针"  
    18.         }else if(des<srcArray[middle]){  
    19.             high=middle-1;  
    20.         //移动最低的"指针"   
    21.         }else{  
    22.             low=middle+1;  
    23.             }  
    24.         }  
    25.         return-1;  
    26.         }  
    27.       
    28. }  


    采用递归方式完成二分查找算法。代码如下所示。


    1. /** 
    2.  * 递归方法实现二分查找法. 
    3.  * @param Array数组 
    4.  * @param low 数组第一位置 
    5.  * @param high 最高 
    6.  * @param key 要查找的值. 
    7.  * @return 返回值. 
    8.  */  
    9. int BinSearch(int Array[],int low,int high,int key)  
    10. {  
    11.     if (low<=high)  
    12.     {  
    13.         int mid = (low+high)/2;  
    14.         if(key == Array[mid])  
    15.             return mid;  
    16.         else if(key<Array[mid])  
    17.             //移动low和high  
    18.             return BinSearch(Array,low,mid-1,key);  
    19.         else if(key>Array[mid])  
    20.             return BinSearch(Array,mid+1,high,key);  
    21.     }  
    22.     else  
    23.         return -1;  
    24. }  

    递归思想会被经常用到,更加突出了编程解决问题的高效。 print?在CODE上查看代码片派生到我的代码片
  1.     /* 
  2.      * 非递归二分查找算法 
  3.      * 参数:整型数组,需要比较的数. 
  4.      */ 
  5.     public static int binarySearch(Integer[]srcArray,int des){ 
  6.         //第一个位置. 
  7.         int low=0
  8.         //最高位置.数组长度-1,因为下标是从0开始的. 
  9.         int high=srcArray.length-1
  10.         //当low"指针"和high不重复的时候. 
  11.         while(low<=high){ 
  12.             //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2 
  13.             int middle=low+((high-low)>>1); 
  14.         //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标. 
  15.         if(des==srcArray[middle]){ 
  16.             return middle; 
  17.         //如果小于的话则移动最高层的"指针" 
  18.         }else if(des<srcArray[middle]){ 
  19.             high=middle-1
  20.         //移动最低的"指针"  
  21.         }else
  22.             low=middle+1
  23.             } 
  24.         } 
  25.         return-1
  26.         } 
  27.      


采用递归方式完成二分查找算法。代码如下所示。


  1. /** 
  2. * 递归方法实现二分查找法. 
  3. * @param Array数组 
  4. * @param low 数组第一位置 
  5. * @param high 最高 
  6. * @param key 要查找的值. 
  7. * @return 返回值. 
  8. */ 
  9. int BinSearch(int Array[],int low,int high,int key) 
  10.     if (low<=high) 
  11.     { 
  12.         int mid = (low+high)/2
  13.         if(key == Array[mid]) 
  14.             return mid; 
  15.         else if(key<Array[mid]) 
  16.             //移动low和high 
  17.             return BinSearch(Array,low,mid-1,key); 
  18.         else if(key>Array[mid]) 
  19.             return BinSearch(Array,mid+1,high,key); 
  20.     } 
  21.     else 
  22.         return -1

递归思想会被经常用到,更加突出了编程解决问题的高效。
  • 相关阅读:
    Asp.net中文本框全选的实现
    如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录。
    asp.net存储过程分页+GridView控件 几百万数据 超快
    Gridview各种功能+AspNetPager+Ajax实现无刷新存储过程分页 (留着用)
    asp.net导出EXCEL的好方法!(好用,导出全部数据)
    GridView分页的实现 ASP.NET c#(转)特好用
    asp.net c# repeater或gridview导出EXCEL的详细代码。
    c#实现word,excel转pdf代码及部分Office 2007文件格式转换为xps和pdf代码整理
    C# WORD操作实现代码(转载)
    如何提高程序员的生产率 (2)
  • 原文地址:https://www.cnblogs.com/hdk1993/p/5857593.html
  • Copyright © 2020-2023  润新知