查找算法

640阅读 0评论2014-11-14 mandagod
分类:C/C++

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. }

上一篇:排序算法集合 -3
下一篇:优先队列 - 堆