1. 二分查找法
从一个有序数组中查找具体的某个数字 n。
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int k = 7;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left > right) {
int mid = (left + right) / 2;
if (mid < k) {
left = mid + 1;
}
else if (mid > k) {
right = mid - 1;
}
else {
printf("找到了,下标是:%d", mid);
break;
}
}
if (left > right) {
printf("找不到");
}
return 0;
}
时间复杂度:
关键点:
- mid 求取在循环内部。
- 循环的终止条件。