数据结构:存放数字的数组
算法:暴力查找,二分搜索
二分搜索
要求:在有序数组中查找一个特定的X
1,从数组的中间元素开始,如果中间元素正好是X,而查找成功
2,否则我i们利用中间位置将数组分为前后两个子数组,如果X小于中间位置的元素,则进一步查找前一个子数组,否则进一步查找后一个子数组
3,重复以上步骤,直到找到满足条件的元素,或直到子数组不存在为止,代表查找不成功
代码实现
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int left = 0, right = sizeof(arr)/4-1, mid;
int k;
scanf_s("%d", &k);
while (left < right)
{
mid = (left + right) / 2;
if (k == arr[mid])
printf("%d", k);
if (k < arr[mid])
right = mid - 1;
else
left = mid + 1;
}
return 0;
}
复杂度分析
n/2,n/4,n/8……,n/2^k
最糟糕的情况,n/2^k=1
即k=logN(次)