分治算法 - 完美二分搜索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xnh_565175944/article/details/82634691

二分搜索查找是分治算法的典型例子

 

给定已经排好序的n个元素存在数组a中, 现要在这n个元素中找出特定元素x

 

  1. 一般方法是顺序查找,逐个比较数组a中每个元素,直到找到元素x位置。这种方式需要O(n)次的比较。
  2. 二分搜索的方法是利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(logn)时间完成搜索任务。(使用条件是排序好的数组)

代码:

int binarySearch(int a[],int x,int n)

{
    int left = 0;    //左值
    int right = n-1;     //右值
    while(left <= right)  //终止条件
    {
        //一般是int middle = (left + right)/2; 但是数据过大的话,数据会溢出。而通常用二分查找就是因为查找的数据量太大。
        int middle = left+(right-left)/2;  //所以这种方式是完美二分搜索
        if(x == a[middle])
               return middle;
        if(x>a[middle])
               left = middle+1;
        else
               right = middle-1; 
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/xnh_565175944/article/details/82634691
今日推荐