1、实验报告一、实验题目:冒泡排序、直接插入排序和直接选择排序的算法。二、实验环境:window7、mytc、计算机一台三、实验目的:通过编程熟练掌握实现冒泡排序、直接插入排序和直接选择排序的算法。四、实验内容:(1)输入数据运算字符。首先输入冒泡排序的运算程序:#define N 4void bustor(int x, int n)int i,j,m,k;for(i=1;ixj+1)m=xj;xj=xj+1; /*相邻两数交换*/xj+1=m;k=0; /*本趟发生了数据交换*/if(k=1)break;之后运行主程序main() /*程序由此开始*/int aN+1,i;for(i=1;ixj
2、+1) /*若前面的数大于后面的数则交换*/m=xj;xj=xj+1; /*相邻两数交换*/xj+1=m; k=0; /*本趟发生数据交换*/if(k=1)break; /*若第 i 趟未发生数据交换,则排序结束*/main() /*程序由此开始*/int aN+1,i;for(i=1;i=N;i+)scanf(“%d“, /*输入 N 个数*/bustor(a,N); /*调入冒泡排序函数*/for(i=1;i=N;i+) printf(“%4d“, /*输入排序后的序列*/ /*程序到此结束*/经检查发现 void bustor(int x, int n),语句加了,导致程序运行错误。fo
3、r(j=1,j=n-1,j+)语句中应该是;导致程序运行错误直接插入排序:当运行此段程序发现运行结果与运行的用例应得的结果不同#define N 7void sis(int r, int n)int i,j;for(i=2;i=n;i+) /*从第 2 个数开始逐个插入*/r0=ri; /*把待插数保存到 r0中*/j=i-1;while(r0rj) /*待插数小于前面数时,做下面工作*/rj+1=rj; /*前面数据后移 1 位*/j-;rj+1=r0; /*找到了插入位置,第 i 个数插入完毕*/main() /*程序由此开始*/int aN+1,i;for(i=1;i=N;i+)scan
4、f(“%d“,ai); /*输入 n 个数*/sis(a,N); /*输入 n 个数*/for(i=1;i=N;i+)printf(“%4d“,ai); /*程序到此结束*/经检验发现 scanf(“%d“,scanf(“%d“,ai); 语句没有地址符,导致程序运行错误,并且发现 mytc 在 window7 系统中总出错,也不知是什么原因。直接选择排序:当运行此段程序发现运行结果与运行的用例应得的结果不同#define N 6void bustor(int x, int n)int i,j,m,k;for(i=1;i=n-1;i+) /*n 个数进行 n-1 趟排序*/k=i; /*第 i
5、 趟开始假设第 i 个数最小*/for(j=i+1;j=n;j+) /*从第 i+1 个数到 n 个数找最小数的下标k*/if(xjxk)k=j;if(k!=i) /*若最小数不在第 i 个位置,则交换*/m=xi;xi=xk;xk=m; /*返回 main 中 sestor(a,N) ;的下一句*/main() /*程序由此开始*/int aN+1,i;for(i=1;i=N;i+);scanf(“%d“, /*输入 N 个数*/bustor(a,N); /*调用排序函数*/for(i=1;i=N;i+)printf(“%4d“,ai); /*输出排序结果*/printf(“n“); /*程序到此结束*/经检验发现 bustor(a,N);调用排序函数忘记了,导致程序运行错误。并且 for(i=1;i=N;i+)添加;导致程序运行错误。在以上的种种的失误中,我觉得归根到底还是自己的基本知识没有掌握好,有些知识点以为学会了,其实在实际的操作中不断检验出自己有这样或那样的不足之处。而这次操作让我也有了不小的收获。实验人员姓名:张坤 学号:031210500148 学校:淄博职业学院