一个很简单的有关问题,关于二分查找
一个很简单的问题,关于二分查找
如题目,这是在树上看到的一个二分查找(折半查找),请大虾们帮小弟看看,这个查找有问题吗?
------解决方案--------------------
- C/C++ code
int binsearch(int x, int v[], int n) { int low, high, mid; low=0; high=n-1; while(low <= high) { mid = (low+high)/2; if (x < v[mid]) high = mid +1; else if (x > v[mid]) low = mid + 1; else return mid; } return -1; }
如题目,这是在树上看到的一个二分查找(折半查找),请大虾们帮小弟看看,这个查找有问题吗?
------解决方案--------------------
- C/C++ code
if (x < v[mid]) high = mid - 1; else if (x > v[mid]) low = mid + 1;
------解决方案--------------------
- C/C++ code
int binsearch(int x, int v[], int n) { int low, high, mid; low=0; high=n-1; while(low <= high) { mid = (low+high)/2; if (x < v[mid]) high = mid - 1; // 这里要用-1 else if (x > v[mid]) low = mid + 1; else return mid; } return -1; }
------解决方案--------------------
- C/C++ code
int binary_serch(int *arr, int arr_len, int value) { int l = 0; int h = arr_len - 1; int m; while(l <= h) { m = l + ((h-l)>>1); if(value > arr[m]) { l = m + 1; } else if(value < arr[m]) { h = m - 1; } else { return m; } } return -1; }
------解决方案--------------------
右移一位,相当于除2