2、idchosemax(inta[],intn,intz){intb=a[z];for(inti=z;i=a[i+1]){continue;}elseb=a[i+1];}for(intx=z;x<=n;x++){if(a[x]==b){break;}}-27-intt=a[z];a[z]=a[x];a[x]=t;printf("选择数组a中剩下的元素中最大的一个:t");printf("%d",a[z]);}//堆排序voidshift(inta[],inti,intn){intt=a[i],j=i+i;while(j<=n){if
3、(ja[j+1])j++;if(t>a[j]){a[j/2]=a[j];a[j]=t;j=j*2;}elsebreak;}}-27-voidheapsort(inta[],intn){intb=0;inti,temp;for(i=n;i>0;i--){temp=a[i];a
4、[i]=a[1];a[1]=temp;shift(a,1,i-1);b=b+1;printf("输出第%d个元素:%d",b,a[i]);if(i!=1)printf("开始构建剩下元素的大顶堆");}getchar();getchar();}-27-voidheapsortSmall(inta[],intn){intb=0;inti,temp;for(i=n;i>0;i--){temp=a[i];a[i]=a[1];a[1]=temp;shiftSmall(a,1,i-1);b=b+1;printf("输出第%d个元素:%d",b,a[i]);if
5、(i!=1)printf("开始构建剩下元素的小顶堆");}getchar();getchar();}-27-2.3ADT描述ADTArray{数据对象:ji=0,…,bi-1,i=1,2,…,n,D={aj1j2…jn
6、n(>0)称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2…jn∈ElemSet}数据关系:R={R1,R2,R3,…,Rn}Ri={
7、0<=jk<=bk-1,1<=k<=n且k≠i,0<=ji<=bi-2,aj1…ji…jn,aj1…ji+1…jn∈D,i=2,…
8、,n}基本操作:voidshift(inta[],intI,intn)初始条件:数组a已存在,i为n/2,n为数组的长度操作结果:把数组a中n个元素构造成为一个大顶堆。voidshiftSmall(inta[],inti,intn)初始条件:数组a已存在,i为n/2,n为数组的长度操作结果:把数组a中n个元素构造成为一个小顶堆。voidheapsort(inta[],intn)初始条件:数组a已存在,n为数组长度。操作结果:把数组a中n个元素循环构建大顶堆,并输出堆顶元素。-27-voidheapsortSmall(inta[],intn)初始条件:数组a已存在
9、,n为数组长度。操作结果:把数组a中n个元素循环构建小顶堆,并输出堆顶元素。chosemin(inta[],intz,intn)初始条件:数组a已存在,z为数组剩下的元素,n为数组长度。操作结果:数组a从第z个元素中开始找最小的一个并与a[z]换位并并输出a[z]。chosemax(inta[],intz,intn)初始条件:数组a已存在,z为数组剩下的元素,n为数组长度。操作结果:数组a从第z个元素中开始找最大的一个并与a[z]换位并输出a[z]。}2.4功能模块分析这个程序实现的是一个堆排序和一个直接选择排序的功能。它分为3个模块:1.输入数据元素。2.把数
10、组元素通过直接选择排序的