int search(int *nums, int numsSize, int target) { int low = 0, high = numsSize - 1; while (low <= high) { int mid = low + (high - low) / 2; if (target > nums[mid]) { low = mid + 1; } else if (target < nums[mid]) { high = mid - 1; } else { return mid; } } return -1; } /* Another solution: Using bsearch() */ int cmpint(const void *a, const void *b) { return *(int *)a - *(int *)b; } int search(int *nums, int numsSize, int target) { int *ret = bsearch(&target, nums, numsSize, sizeof(int), cmpint); if (ret) return (ret - nums); else return -1; }