二分搜索
我觉得要了解这两种策略,除了多刷题没别的方法。
二分搜索
#include <stdio.h> #include <stdlib.h> int BinSerach(int a[], int first, int LEN,int j) { if(j == a[(first + LEN)/2]) return j; if(j < a[(first + LEN)/2]) return BinSerach(a, first, (first + LEN)/2, j); if(j > a[(first + LEN)/2]) return BinSerach(a, (first + LEN)/2, LEN, j); printf("no this intger\n"); } int main() { const int LEN = 1000; int a[LEN]; int i; for(i = 0; i < LEN; i++) a[i] = i; int j; printf("请输入数字:"); scanf("%d", &j); if(j > a[LEN - 1]) { printf("no seek"); exit(0); } getchar(); getchar(); j = BinSerach(a, 0, LEN - 1,j); printf("output:%d \n", j); }
这是我仿照july大神实现的一个二分搜索算法
我上面写的是啥。天哪
void binary_search(int arry[], int n, int value)
{
int left = 0;
int right = n - 1;
while(left <= right)
{
int middle = left + ((right - left)>>1);
if(a[middle] < value)
{
left = middle + 1;
}
else if(a[middle] > value)
{
right = middle - 1;
}
else
{
return middle;
}
}
return -1;
}
浙公网安备 33010602011771号