C语言实现二分查找法
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>
1.计算元素个数
left为左下标(以中间元素的下标为标准)
right为右下标(以中间元素的下标为标准)
元素 1 2 3 4 5 6 7 8 9 10
下标 0 1 2 3 4 5 6 7 8 9
int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 7; int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz-1;
若查找的元素存在,右下标是会比左下标大的;int mid = left + (right-left) / 2计算中间元素的下标,采用这种方式是为了防止left和right太大而溢出;
while (left <= right) { int mid = left + (right-left) / 2; if (arr[mid] > k) { right = mid - 1;1 } else if (arr[mid] < k) { left = mid + 1; } else { printf("找到了,下标是:%d\n",mid); break; } }
若查找的元素不存在,左下标是会比右下标大的
if (left > right) printf("找不到\n"); return 0; }