折半查找两种实现

Posted 鹏鹏进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半查找两种实现相关的知识,希望对你有一定的参考价值。

 
public class biSearch { 
 
    /**
     * @param args
     */ 
    /*
    折半查找--当查找表是有序表时,可采用折半查找;
    基本思想:在有序表中,取中间元素作为比较对象,若给定值K与中间记录关键字相等,则查找成功;
    若给定值K小于中间记录的关键字,则在表的左半区继续查找;
    若给定值K大于中间记录的关键字,则在表的右半区继续查找,不断重复,直到查找成功/失败。
    */ 
 
    //折半查找非递归算法 
    //查询成功返回该对象的下标序号,失败时返回-1。 
    int BiSearch(int r[],int n,int k) 
    { 
        int low=0; 
        int high=n-1; 
        while(low<=high) 
        { 
            int mid=(low+high)/2; 
            if(r[mid]==k) 
                return mid; 
            else 
                if(r[mid]<k) 
                    low=mid+1; 
                else 
                    high=mid-1; 
        } 
        return -1; 
    } 
 
 
    //折半查找递归算法 
    //查询成功返回该对象的下标序号,失败时返回-1。 
    int BiSearch2(int r[],int low,int high,int k) 
    { 
        if(low>high) 
            return -1; 
        else 
        { 
            int mid=(low+high)/2; 
            if(r[mid]==k) 
                return mid; 
            else 
                if(r[mid]<k) 
                    return BiSearch2(r,mid+1,high,k); 
                else 
                    return BiSearch2(r,low,mid-1,k); 
 
        } 
    } 
     
    public static void main(String[] args) { 
        biSearch bs=new biSearch(); 
        int r[]={1,2,3,4,5}; 
        System.out.println(bs.BiSearch(r,5,5)); 
        System.out.println(bs.BiSearch2(r,1,5,5)); 
    } 
 
} 

 

以上是关于折半查找两种实现的主要内容,如果未能解决你的问题,请参考以下文章

c语言编程实现“折半查找”的过程。

求中位数,O(n)的java实现利用快速排序折半查找中位数

C语言折半查找法详细代码(假如有10个已排好序的数)

c语言折半查找法

python实现二分查找(折半查找)算法

21年考研王道数据结构2-9算法:通过折半查找指定值X并根据结果进行操作(两种方法)