这周主要学习了二分法和一二维前缀这两项.
先说一下二分法,这种思想在高中数学时期,老师讲过大概类似的思想,就比如那些无理数(根号下除不尽的数),就需要去估算他们在那个范围里,这时候就需要使用二分法,就是先找个大概,比如说√2,想知道他的范围,就先找1和2,然后看是在1到1.5之间,还是在1.5到2之间,然后依次类推就能知道他的精确范围了.
在编程中运用的二分法原理是一样的,比如想找这个数在数列中的第几索引,首先要找数列个数的中间数,然后判断这个数是在前半部分还是在后半部分,判断完之后继续在小范围内进行判断,经过不断缩小范围,最终一定能找到那个数在数列中是第几索引.代码如下:
int answer = -1;
int a[10] = {10,20,30,40,50,60,70,80,90,100}
int low = 0,high=10-1; //最大值必须为数组长度-1
int mid =(low+high)/2; //计算出中间值
while(low<=high){
if(set<mid) { //set为需要寻找的数字
high = mid-1;
else if(set>mid){
low = mid+1; //开始缩小范围
else answer=mid;
if(answer=-1) //此时为数组中不存在需要寻找的数字
cout<<"不存在"<<endl;
else cout<<"该数在此数列中为第"<<mid<<"索引"<<endl;