1、实验报告 一、实验题目:冒泡排序、直接插入排序和直接选择排序的算法。 二、实验环境: window7、 mytc、计算机一台 三、实验目的:通过编程熟练掌握实现冒泡排序、直接插入排序和直接选择排序的算法。 四、实验内容: ( 1)输入数据运算字符。 首先输入冒泡排序的运算程序: #define N 4 void 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() /*程序由此开始 *
2、/ int aN+1,i; for(i=1;ixj+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“, /*输入排序后的序列 */ /*程序到此结束 */ 经检
3、查发现 void bustor(int x, int n),语句加了,导致程序运行错误。 for(j=1, j=n-1, j+)语句中应该是;导致程序运行错误 直接插入排序: 当运行此段程序发现运行结果与运行的用例应得的结果不同 #define N 7 void 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; /*找
4、到了插入位置,第 i 个数插入完毕 */ main() /*程序由此开始 */ int aN+1,i; for(i=1;i=N;i+) scanf(“%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 6
5、void bustor(int x, int n) int i,j,m,k; for(i=1;i=n-1;i+) /*n 个数进行 n-1 趟排序 */ k=i; /*第 i 趟开始假设第 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); /*输出排序结果 */