This commit is contained in:
hairrrrr
2020-05-16 21:00:46 +08:00
parent 6f5fca9060
commit 2a04bdc09d
2 changed files with 63 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
// 数组法(不对称边界)
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;
}

View File

@@ -0,0 +1 @@
编写一个函数对一个已排序的整数表执行二分查找。函数的输入包含一个指向表头的指针表中的元素个数以及待查找的数值。函数输出是一个指向满足查找要求的元素的指针当未查找的要求的数值时输出一个NULL指针。