Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670128
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: C/C++

2011-06-16 14:28:19

1、二分搜索算法
   前提条件:搜索的序列本身有序。
  1. #include <iostream>
  2. using namespace std;

  3. //在数组a(0,....n-1)中搜索x,找到x时返回它在数组中的下标,否则返回-1
  4. template <class Type>
  5. int BinarySearch(const Type a[], const Type &x, int n)
  6. {
  7.     int left = 0, right = n-1;
  8.     int mid;
  9.     while (left <= right)
  10.     {
  11.         mid = (left + right) / 2;
  12.         if (a[mid] == x)
  13.         {
  14.             return mid;
  15.         }
  16.         else if (a[mid] > x)
  17.         {
  18.             right = mid - 1;
  19.         }
  20.         else if (a[mid] < x)
  21.         {
  22.             left = mid + 1;
  23.         }
  24.     }
  25.     return -1; //未找到x
  26. }

  27. int main()
  28. {
  29.     int arr[10];
  30.     for (int i = 0; i < 10; i++)
  31.     {
  32.         arr[i] = i + 1;
  33.     }
  34.     int index = BinarySearch(arr, 33, 10);
  35.     cout<<index<<endl;

  36.     return 0;
  37. }
整个算法的最坏时间复杂性为O(logn)。在查找不成功的情况,共比较的次数为:
 
阅读(1037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~