1、实验九 比较两段不同的排序算法并进行改良一、 目的和要求1. 掌握数组名作为函数参数的编程方法2. 学会比较不同算法优劣 二、 实验内容1、程序比较题(下面给出的是 2 种不同的排序算法的程序段,请分别画出它们对应的流程图,并分析他们的优劣。 )题目要求:在键盘上输入 N 个整数, 试编制程序使该数组中的数按照从大到小的次序排列。方法一:冒泡排序 从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此 类推直到第(N-1)遍比较后就可以完成排序。源程序如下: #define
2、 N 10 #include“stdio.h“ main() int aN,i,j,temp; printf(“please input %d numbersn“,N); for(i=0;iaj+1) temp=aj; aj=aj+1; aj+1=temp; printf(“the array after sort:n“); for(i=0;iN;i+) printf(“%5d“,ai); 方法二:选择排序 首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。以此类推,直到所有的
3、值从小到大的顺序排列为止。 #include“stdio.h“ #define N 10 main() int aN,i,j,r,temp; printf(“please input %d numbersn“,N); for(i=0;iN;i+) scanf(“%d“, for(i=0;iN-1;i+) r=i; for(j=i+1;jN;j+) if(ajar) r=j; if(r!=i) temp=ar; ar=ai; ai=temp; printf(“the array after sort:n“); for(i=0;iN;i+) printf(“%5d“,ai); printf(“n“); 2、编程对上面两个程序段进行改良,使用函数完成排序,使用单步跟踪, 观察数组名作为函数参数时内存中数据的变化。要求包括主函数和如下子函数:(本题可参考 203 页习题 8.15)(1( 输入无序的十个整数;(2( 用冒泡法从小到大排序;(3( 要求输入一个整数,用折半查找法找出该数,若存在,在主函数中 输出其所处的位置,否则,插入适当位置;分析:input 函数完成 10 个整数的录入。sort 函数完成起泡法排序,search 函数完成输入数的查找。