mirror of
https://github.com/hairrrrr/C-CrashCourse.git
synced 2026-02-03 10:43:15 +08:00
1
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
编写一个函数,对一个已排序的整数表执行二分查找。函数的输入包含一个指向表头的指针,表中的元素个数,以及待查找的数值。函数输出是一个指向满足查找要求的元素的指针,当未查找的要求的数值时,输出一个NULL指针。
|
||||
Reference in New Issue
Block a user