算法第二章上机实践报告

Posted on 2019-09-24 21:12  马浩文  阅读(102)  评论(0编辑  收藏  举报

算法第二章上机实践报告
组员:潘越,马浩文
题目:输入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
问题描述:用二分法比较下标并且记录比较次数,若x不存在则输出-1和比较次数
3.算法描述
include<iostream>
using namespace std;
int S(int *p, int n, int x, int& num)
{
int left, right, mid;
left = 0;
right = n - 1;
while(left <= right)
{
    num++;
    mid = (left + right) / 2;
    if (x == p[mid])
        return mid;
    
    else if (x < p[mid])
        right = mid - 1;
    
    else
        left = mid + 1;
}
return -;}
int main(void)
{
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; i++)
{
    cin >> a[i];
}
int x,num, m;
cin >> x;
num = 0;
m = S(a, n, x, num);

cout << m << endl;
cout << num;}
算法时间及空间复杂度分析
二分法查找,每次循环长度少一半:T(n) = Logn * O(1) = O(Logn)
因为辅助空间是常数级别的:S(n)=O(1)