欢迎光临散文网 会员登陆 & 注册

《算法设计与分析》实验报告2

2022-08-05 10:21 作者:老师-忘记密码  | 我要投稿

算法设计与分析》实验报告2

 

实验名称: 可以进行范围查找的折半查找算法

系    别:xxx           

专    业:xxx           

班    级:xxx

姓    名:xxx          

学    号:xxx

实验日期:xx年xx月xx日


 

1.  算法题目

根据减治法的设计思想和算法步骤,要求学生设计一个减治算法,用于解决能够进行范围查找的折 半查找算法的改造问题。减治方法是分治方法中每次只走半边区段的特殊分治法(既要么走左半 段,要么走右半段)。给定一个查找范围(a,b),可以分三种情况进行处理。(a,b)段要么在左半段, 要么在右半段,要么跨两半段。无论哪种情况,在下一轮迭代中只需要选择一种情况进行处理。因 此可以使用减治法解决该问题。

 

2.  设计思路与步骤

修改折半查找,分别用范围的下限和上限与mid对比,if (l >= mid)则改变查找下限;if (r <= mid)则改变查找上限;否则就以mid为中心,向两边查找。

 

3.  算法实现与代码

#include<stdio.h>

#include<stdlib.h>

int Bisearch(int a[], int l, int r, int first, int end);

int main() {

int a[101], i, l, r;

for (i = 1; i < 100; i++) {

a[i] = i;

}

printf("请输入要查找的范围:\n");

printf("l = ");

scanf("%d", &l);

printf("r = ");

scanf("%d", &r);

if (l < 1 || r > 100 || l > r) {

printf("输入的范围错误!\n");

exit(0);

}

Bisearch(a, l, r, 1, 100);

return 0;

}

int Bisearch(int a[], int l, int r, int first, int end) {

int n = r - l;

int low = first, high = end;

int mid, flag, i;

while (low <= high) {

mid = (low + high) / 2;

if (l >= mid) {

low = mid - 1;

}

else if (r <= mid) {

high = mid;

}

else {

flag = 0;

i = mid;

while(!flag) {

if(a[i] == a[l]) {

flag = 1;

}

printf("%d ", a[i]);

i--;

}

flag = 0;

i = mid + 1;

while(!flag){

if(a[i] == a[r]) {

flag = 1;

}

printf("%d ", a[i]);

i++;

}

return 0;

}

}

return 1;

}

 

4.  测试用例与结果

 


5.  问题与总结:

答:xxx。

 

《算法设计与分析》实验报告2的评论 (共 条)

分享到微博请遵守国家法律