二分查找代碼


也叫折半查找。

優點:比較次數少,查找速度快,平均性能好。

缺點:查找的數組必須為排序好的數組。

時間復雜度:O(logN)

代碼:(遞歸:用棧保存結果空間消耗嚴重)

#include <iostream>
using namespace std;
//二分查找  返回位置標號  時間復雜度O(logN)  
int binarySearch(int list[],int left,int right,int number)
{
    if(list==NULL)
        return -1;
    int index=0;
    int mid=(right+left)/2;
    if(left>right)
    {
        return -1;
    }
    if(number==list[mid])
    {
        index=mid;
        return index;
    }
    else if(number>list[mid])
    {
        binarySearch(list,mid+1,right,number);
    }
    else
    {
        binarySearch(list,left,mid-1,number);
    }
}
int main()
{
    int a[]={1,3,5,7,9,11,14,16,17,20};
    int left = 0;
    int right = sizeof(a)/sizeof(a[0])-1;
    int index =binarySearch(a,left,right,88);
    cout<<index<<endl;
    return 0;
}

非遞歸:(能用循環不用遞歸)

#include <iostream>
using namespace std;
//二分查找  返回位置標號  時間復雜度O(logN)  
int binarySearch(int list[],int left,int right,int number)
{
    if(list==NULL)
        return -1;
    while(left<right)
    {
        int mid=(right+left)/2;
        if(list[mid] == number)
        {
            return mid;
        }
        else if(number > list[mid])
        {
            left=mid+1;
        }
        else if(number < list[mid])
        {
            right=mid-1;
        }
    }
    return -1;
}
int main()
{
    int a[]={1,3,5,7,9,11,14,16,17,20};
    int left = 0;
    int right = sizeof(a)/sizeof(a[0])-1;
    int index =binarySearch(a,left,right,11);
    cout<<index<<endl;
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM