全实验的实验报告.docx
- 文档编号:9310028
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:234.09KB
全实验的实验报告.docx
《全实验的实验报告.docx》由会员分享,可在线阅读,更多相关《全实验的实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
全实验的实验报告
实验一的实验报告
一实验内容
冒泡排序,快速排序,希尔排序的实验编写
二实验问题分析:
排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,
重新排列成一个按关键字有序的序列。
排序过程:
首先将第一个记录的关键字和第二个记录的关键进行比较,若为逆序则将两个记录交换,然后比较第二个记录和第三个记录的关键字。
以此类推,直到第n-1个记录和第n个记录的关键字进行过比较为止,上述过程为第一趟冒泡排序,其结果使得关键字最大的记录被安置在最后一个记录位置上。
然后进行第二次排序,对前n-1个记录进行同样操作,其结果是使得关键字次大的被安排在第n-1个记录位置上。
重复以上操作,直到在一趟排序中没有进行过交换记录的操作。
三实验模型:
定义个数组num[20],比较num[a]>num[a+1];则交换,就这样比较下去。
四程序流程图:
五源代码
冒泡排序:
#include
voidmain()
{
intnum[20];
cout<<"输入二十个数"< for(inti=0;i<20;i++) { cin>>num[i]; } for(i=0;i<20;i++) for(intj=1;j<20;j++) { for(inta=0;a<20-j;a++) { if(num[a]>num[a+1]) { inttemp; temp=num[a]; num[a]=num[a+1]; num[a+1]=temp; } } } for(i=0;i<20;i++) cout< cout< } 快速排序: #include usingnamespacestd; intquicksort(inta[],intlow,inthigh) { intk; inti,j; if(low { k=a[low]; i=low; j=high; while(i { while((i j--; a[i]=a[j]; while((i i++; a[j]=a[i]; } a[i]=k; } returni; } voidET(inta[],intlow,inthigh) { intp; if(low { p=quicksort(a,low,high); ET(a,low,p-1); ET(a,p+1,high); } } intmain() { inta[10],i; cout<<"inputtennumber"< for(i=0;i<10;i++) { cin>>a[i]; } ET(a,0,9); cout<<"排序结果"< for(i=0;i<10;i++) cout< cout< return0; } 希尔排序: #include usingnamespacestd; intmain(void) { int*T,n,i,j; T=(int*)malloc((n+1)*sizeof(int)); cout<<"请输入需要排序的数的个数: "< cin>>n; cout<<"要排序的数如下: "< for(i=1;i<=n;i++) { cin>>T[i]; } intd; d=n; do{ d=d/3+1; }while(d>1); for(i=d+1;i<=n;i++) { if(T[i] { T[0]=T[i]; j=i-d; do{ T[j+d]=T[j]; j=j-d; }while(j>0&&T[0] T[j+d]=T[0]; } } cout<<"排序后的结果如下: "< for(i=1;i<=n;i++) { cout< } cout< return0; 六测试结果: 冒泡排序结果: 快速排序结果i: 希尔排序结果: 实验二递归算法设计 一实验内容: 写出计算ackermann函数ack(m,n)的递归计算函数; 判断S是否为“回文”的递归函数,并编写程序测试。 二实验问题分析: 递归算法是设计和描述算法的一种有效的工具,它更侧重于算法,而是算法策略。 递归算法是利用大问题与其子问题间的递推关系来解决的。 对于此函数,输入两个数,然后对这两个数经行分析,分析后在相应的函数下进行及算。 三实验模型: 对于m>=0,n>=0,ack(m,n)定义为: Ack(0,n)=n+1 Ack(m,0)=ack(m-1,1) Ack(m,n)=ack(m-1,ack(m,n-1)) 四实验流程图: 五源代码: ackermann函数: #include usingnamespacestd; intack(intm,intn); intmain() { intm,n,result; printf("请输入两个数: \n"); scanf("%d%d",&m,&n); result=ack(m,n); cout< //printf("%d",&a); return0; } intack(intm,intn) { if(m==0)returnn+1; if(n==0)returnack(m-1,1); returnack(m-1,ack(m,n-1)); } 回文: #include charb[1024]; inthuiwen(inta,intcount) { if(a==count/2) { return1; } else if(b[a]==b[count-a-1]) return(huiwen(a-1,count))&&1; else { return0; } } intmain(void) { intcount; inti; for(i=0;i<1024;i++) { scanf("%c",&b[i]); if(b[i]=='\n') break; } count=i; i--; printf("%d\n",huiwen(i,count)); return0; } 六实验结果: ackermann函数结果: 回文结果: 实验三分治算法的应用 一实验内容: 白马百担问题; 利用分支法就一组数据中最大的两个数和最小的两个数 二实验问题分析: 这个问题可以列出两个三元一次方程,去解这个补丁解方程,就能找出问题的解。 设计如下: I,j,k分别为大马,中马,小马的数量。 尝试范围: 一共是一百匹马,大马数量100/3=33,大马数量最多为33匹,同理中马,小马数量可以得出最多分别为50,100匹。 三实验模型: i+j+k==100和3*i+2*j+k/2==100 四实验流程图: 五源代码: 白马百担: #include voidmain() { inti,j,k,n;/*i,j,k分别表示大马匹数、中马匹数、小马匹数*/ for(i=0;i<=33;i++)/*大马至多为100/3匹*/ { for(j=0;j<=50;j++)/*中马至多为100/2=50匹 { for(k=0;k<=100;k++) { if((i+j+k==100)&&(3*i+2*j+k/2==100)) { printf("i=%d,j=%d,k=%d\n",i,j,k); } } } } 分治法: #include usingnamespacestd; intmain() { inta[10],i,j,k; intmax1,max2,min1,min2; cout<<"请输入十个数"< for(i=0;i<=9;i++) { cin>>a[i]; } max1=a[0]; min1=a[0]; max2=a[5]; min2=a[5]; for(k=0;k<=4;k++) { if(max1 { max1=a[k]; } elseif(min1>a[k]) { min1=a[k]; } } for(j=5;j<=9;j++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告