diff --git a/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/bsearch.c b/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/bsearch.c new file mode 100644 index 0000000..379b3dd --- /dev/null +++ b/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/bsearch.c @@ -0,0 +1,62 @@ +#define _CRT_SECURE_NO_WARNINGS 1 + +#include + +// 鷨ԳƱ߽磩 +int* bsearch(int* arr, int n, int key) { + + //ڲԳƱ߽˵mid ȡֵΪ lo <= mid < hi + int lo = 0; + int hi = n; + + while (lo < hi) { + int mid = (lo + hi) / 2; + if (arr[mid] > key) + hi = mid; + else if (arr[mid] < key) + lo = mid + 1; + else + return arr + mid; + } + + return NULL; +} + +// ָ뷨ԳƱ߽磩 +int* bsearch(int* arr, int n, int key) { + + int* lo = arr; + int* hi = arr + n; + + while (lo < hi) { + int* mid = lo + ((hi - lo)>>2); //ָļӷû + if (*mid > key) + hi = mid; + else if (*mid < key) + lo = mid + 1; + else + return mid; + } + + return NULL; +} + +// 鷨ԳƱ߽磩 +int* bsearch(int* arr, int n, int key) { + + //ڶԳƱ߽˵mid ȡֵΪ lo <= mid <= hi + int lo = 0; + int hi = n - 1; + + while (lo <= hi) { + int mid = (lo + hi) / 2; + if (arr[mid] > key) + hi = mid + 1; + else if (arr[mid] < key) + lo = mid + 1; + else + return arr + mid; + } + + return NULL; +} diff --git a/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/readme.md b/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/readme.md new file mode 100644 index 0000000..35bb233 --- /dev/null +++ b/Coding/C_Traps_and_Pitfalls/Exercises/03 语义陷阱/01 二分查找/readme.md @@ -0,0 +1 @@ +编写一个函数,对一个已排序的整数表执行二分查找。函数的输入包含一个指向表头的指针,表中的元素个数,以及待查找的数值。函数输出是一个指向满足查找要求的元素的指针,当未查找的要求的数值时,输出一个NULL指针。