#include #define SIZE 1000000 #define X 2*((SIZE-1) / 2) + 1 #define T 10000000 int binsearch(int x, int v[], int n); int binsearch_old(int x, int v[], int n); /* run binsearch on array of size SIZE * if arg is provided use old binsearch */ int main(int argc, char *argv[]) { long i; int arr[SIZE]; for (i = 0; i < SIZE; ++i) arr[i] = 2 * i; if (argc == 1) { for (i = 0; i < T; ++i) binsearch(X, arr, SIZE); printf("binsearch : %d\n", binsearch(X, arr, SIZE)); } else { for (i = 0; i < T; ++i) binsearch_old(X, arr, SIZE); printf("old binsearch : %d\n", binsearch_old(X, arr, SIZE)); } return 0; } /* binsearch: find x in sorted v of length n, using one comparison in loop */ 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; else low = mid + 1; } if (v[low] == x) return low; return -1; } /* binsearch: find x in sorted v of length n, using two comparisons in loop */ int binsearch_old(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; }