1.1 算法评判标准和
最大程度上减少运行时间或占用空间
假设有一个包含128个名字的有序列表,你要使用二分查找在其中查找一个名字,请问:
最多需要几步才能找到?
如果长度翻倍,最多需要几步?
简单查找:最多128次
答:1、最多log2 128 = 7
2、最多log2 256 =8
二分法:必须有序,
2的7次方为128,
二分查找也叫折半查找,运气好第一次就找到了,运气不好就7次
大O表示法指出了最糟糕情况下的运行时间,运行时间指的是增速,随着输入量N增大,趋势怎么变化,曲线弧度(导数),
阶乘。增长会很快
算法越快,增速越慢
#include <stdio.h>
int bsearch(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid = low + (high - low)/2; # 还是溢出问题
if(array[mid] > target)
high mid - 1;
else if(array[mid]<target)
low = mid + 1;
else
return mid;
}
return -1;
}
int main(){
int i;
int a[128];
int key;
for (i=0;i<128;i++)
a[i]=j*2;
printf("请输入要找的数:"):scanf("%d",&key);
printf('下标为:%d (-1表示没找到)\n", bsearch(a,0,127,key));
return 0;
}