标签:递归算法 结果 输入格式 strong 二分查找 不用 font ali i++
实践题目:
二分查找
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
4
1 2 3 4
1
0
2
int count = 0;
while(l <= r){
count ++;
....
}
比较要查找的数x时,二分查找
int m =(l + r) / 2; if(x == a[m]) { cout << m <<endl << count; return m; } if(x > a[m]){ l = m+1; } else { r = m-1; }
当要查找的数不存在时,即不符合循环体,跳出循环体,输出-1,同时输出比较次数
cout << "-1" <<endl << count;
return -1;
具体算法如下,以下给出的是递归的算法,与以上如出一辙,只不过递归算法中,把是否找到放在了循环体外,用来直接为输出服务,不干扰递归调用
int BS(int a[],int x, int l, int r, int &count){ count ++; if( l == r){ if(x == a[l]) return l; else return -1; } while (l < r){ int m = (l + r) / 2; if(x == a[m]) { return m; } if(x < a[m]){ return BS(a, x, l, m-1, count); } if(x > a[m]){ return BS(a, x, m+1
int main(){ int a[1005]; int n, x, count = 0; cin >> n; for(int i = 0; i < n; i++){ cin >> a[i]; } cin >> x; cout << BS(a, x, 0, n-1, count) << count << endl ; return 0; }
这样的结果是每次输出的结果都是count的初始化值,而解决办法如下:
cout << BS(a, x, 0, n-1, count) << endl ; cout<< count;
分开写输出语句,因为在调用BS算法时,直接连续输出两个结果,会导致BS算法中后续的结果在位置上失守,使得count值传递不到位......
标签:递归算法 结果 输入格式 strong 二分查找 不用 font ali i++
原文地址:https://www.cnblogs.com/ZAsmn/p/11564608.html