Chinaunix首页 | 论坛 | 博客
  • 博客访问: 653430
  • 博文数量: 160
  • 博客积分: 2384
  • 博客等级: 大尉
  • 技术积分: 1366
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 11:35
文章分类
文章存档

2015年(45)

2014年(36)

2012年(28)

2011年(37)

2010年(2)

2009年(10)

2008年(2)

分类: C/C++

2014-11-14 20:09:16

1. 二分查找算法

循环实现
  1. int binarySearch(int *a, int len, int x) {
  2.     int low = 0;
  3.     int high = len-1;
  4.     int mid;

  5.     while (low <= high) {
  6.         mid = (low + high) / 2;
  7.         if (a[mid] < x)
  8.             low = mid + 1;
  9.         else if (a[mid] > x)
  10.             high = mid - 1;
  11.         else {
  12.             printf("found: a[%d]=%d\n", mid, a[mid]);
  13.             return mid;
  14.         }
  15.     }
  16.     printf("notfound\n");
  17.     return -1;
  18. }
递归实现
  1. int binarySearchRecursive(int *a, int x, int low, int high) {
  2.     if (low > high)
  3.         return -1;

  4.     int mid = (low + high) / 2;
  5.     if (a[mid] < x)
  6.         return binarySearchRecursive(a, x, mid+1, high);
  7.     else if (a[mid] > x)
  8.         return binarySearchRecursive(a, x, low, mid-1);
  9.     else
  10.         return mid;
  11. }

  12. int binarySearchRecursive(int *a, int len, int x) {
  13.     int ind = binarySearchRecursive(a, x, 0, len-1);
  14.     if (ind == -1)
  15.         printf("notfound\n");
  16.     else
  17.         printf("found: a[%d]=%d\n", ind, a[ind]);
  18.     return ind;
  19. }

阅读(563) | 评论(0) | 转发(0) |
0

上一篇:排序算法集合 -3

下一篇:优先队列 - 堆

给主人留下些什么吧!~~