算法第二章上机实践报告

1,实践题目:

7-1 二分查找 (20 分)

输入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

 

2,问题描述:

    要求设置一个数组长度为n的数组,输入数组,对它进行排序,用二分查找某一数值x,查找成功则输出其所在位置及比较次数,否则输出-1及比较次数;

n的范围、输入格式及输出格式都有要求:0<=n<=1000;第一行输入要先输入的数值是n、第二行是输入整个数组中的n 个数值,用空格隔开、第三行是要查询的数值x;查找成功则输出其所在位置及比较次数,否则输出-1及比较次数,用空格隔开或换行都行。

 

3.算法描述:

    

首先确定整个查找区间的中间位置mid=(low+high)/2,用关键字值与中间位置关键字值进行比较;若相等,则查找成功;若大于,则在后半个区域中继续进行折半查找。若小于,则在前半个区域中继续进行折半查找。查找成功,返回关键字所在数组下标,没找到返回-1;

 

4,算法时间及空间复杂度分析(要有分析过程):

    总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。 
由于n/2^k取整后>=1,即令n/2^k=1, 
可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)

5,心得体会(对本次实践收获及疑惑进行总结):

这次二分查找的作业,思路和算法都不算很难,但事实上在实践的过程中还是有很多地方、细节把我不太好,还有一些编译时侯的有超时和与地址的错误。以后我会认真注意这些问题的。

posted @ 2018-10-14 16:58  李胤霖  阅读(320)  评论(0)    收藏  举报