- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计 第一章 递归算法
实验报告
实验目的:理解递归算法的基本思想和递归程序的执行过程,并熟悉编写递归算法。掌握递归算法的思想,对给定的问题能设计出分治算法予以解决。
实验内容:编程实现讲过的例题:二分有哪些信誉好的足球投注网站、合并排序、快速排序。
实验过程:
1.二分有哪些信誉好的足球投注网站:
1.1问题描述
在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。此问题的输入是待查找元素x和线性表L,输出x在L中的位置或者x不在L中的信息。
1.2算法分析
(1)首先将链表中第一个元素给参数low,最后一个元素给参量high;
(2)在lowhigh的条件下:
取d=(low+high)/2;
若所查找元素第d个元素:则将d赋值给参量high;
若所查找元素第d个元素:则将d+1赋值给参量high;
继续在low与high的范围内查找;找到则输出。
(3)当不满足 lowhigh的条件时:输出没有查找到此元素。
1.3程序框图
假定要有哪些信誉好的足球投注网站x=9:
1 4 5 7 8 9 10 12 15 22 23 27 32 35
1 4 5 7 8 9 10
8 9 10 ↑
2. 合并排序
2.1问题描述
假定有一个数组A[1…m]p.q.r是它的三个索引,并且有1=p=qr=m,两个子数组A[p…q] A[q+1…r]各自按升序排列。我们要重新安排A中的元素的位置,使得子数组A[p…r]也按升序排列。
2.2算法思想
⑴.使用两个指针s.t.初始化时各自指向A[p] A[p+1],再用一个空数组
B[p…r]作暂存器。
⑵.每一次比较元素A[s].A[t],将小的元素添加到辅助数组B[p…r]中,如果相同就把A[s]添加进去。同时更新指针,若添加是A[s],则s++;若添加是A[t],则t++;
⑶.当条件s=q+1 or t=q+1时过程结束,在前一种情况下把数组A[t…r]中剩余的元素添加到在B中. 在后一种情况下把数组A[s…q]中剩余的元素添加到在B中.
⑷.最后,把数组B[p…q]复制到A[p…r].
2.3程序框图
如图:给出有序数组两个:
7 8 9 10
7 8 9 10 10 12 15 10 12 15
3. 快速排序
3.1问题描述
假定有一个数组A[1…m].其中的元素为无序排列;我们要重新安排A中的元素的位置,使得子数组A[p…r]也按升序排列。
3.2算法思想
(1)首先将链表中第一个元素给参数low,最后一个元素给参量high;
(2)在lowhigh的条件下:
将low与high之间的元素以low元素为轴,比low小的元素交换到low以前;比low大的元素交换到low以后。此时得到一个以low为轴的划分,然后分别对low前和其后的数列再进行划分,直到数列成为单个元素,此时完成排序;
(3)程序用递归实现。
3.3程序框图
5 7 1 6 4 8 3 2 ↑ ↑
i j
5 1 7 6 4 8 3 2 ↑ ↑
i j
5 1 4 6 7 8 3 2 ↑ ↑
i j
5 1 4 3 7 8 6 2 ↑ ↑
i j
5 1 4 3 2 8 6 7 ↑ ↑
i j
2 1 4 3 5 8 6 7 ↑ ↑
i j
4.程序源代码:
(说明:我是将本试验的的三个小试验放在同一个函数中实现:
首先从文件“data.txt”中读取无序数列存入动态数组中,然后进行快速排序,再读入数据进行合并排序,然后对此有序数列进行二分查找)
#includestdio.h
#includemath.h
#includestdlib.h
int *L,*C;
int Num;
int tag=0;
void readindata()
{
FILE *fpin;
int a,i=0;
if((fpin=fopen(data.txt,r))==NULL)
{
printf(Can not open!);
exit(0);
}
while(!feof(fpin))
{
fscanf(fpin,%d,a);
i++;
}
Num=i;
rewind(fpin);
L=(int*)malloc(sizeof(int)*(Num+1));
for(i=1;i=Num;i++)
{
fscanf(fpin,%d,a);
*(L+i)=a;
}
}
int Partition(int low,int high)
{
in
文档评论(0)