应用题 1.  使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码,完成空出部分的程序。实现函数sort(int A[],int n),用冒泡法对数组数据进行排序。所谓冒泡法,就是每次把相邻的两个数交换,较大的数交换到后面。这样下标从0到n-1的数与其后面相邻的数交换,可以把最大的数交换到数组的末端。进行n次下标从0到n-1的交换,则数组变成有序的,并且按由大到小排序。
    注意:不能修改和删除程序的其他部分,也不能修改程序的结构。
    试题程序:
    #include<iostream.h>
    #define N 10
    void sort(int A[N],int n)
    {
    }
    int main()
    {
    int A[N]={1,50,17,69,87,42,90,-6,0,-11);
    sort(A,10);
    for(int i=0;i<sizeof(A)/sizeof(int);i++)
    {
      cout<<A[i]<<'';
    }
    cout<<endl;
    return 0;
    }
【正确答案】int i,j,k,t;
   for(i=0;i<n-1;i++)
   {
    for(k=i,j=i+1;j<n;j++)
    if(A[k]<A[j])  //如果前面的比后面的小则需要交换
    k=j;
    if(k! =i)//交换
    {
     t=A[i];
     A[i]=A[k];
     A[k]=t;
    }
   }
   
【答案解析】 以数组“A[]={3,8,7,6,5,0,1,2,9,4)”为例来说明具体的排序过程,第一次选择:第一步,从A[0]-A[9]中找最大值max及下标k,max=9,k=8;第二步,交换a[0]与最大值a[8]的值;第一次结束后a[0]已存放了最大值,下一次比较就不必再经过它了,而从a[1]开始,如此循环。从例中可以看出10个元素要进行9次比较,n个元素要进行n-1次比较。设置两层循环,外层循环变量i从0到n-1,内层循环变量从i开始到n-1,在内层循环中找最大值,如果最大值的下标k和i不同,则交换,实现选择法排序。在内层循环体内,如果最大值的下标k和i不同,则用一个临时变量记录第i个元素,然后将第k个元素赋值给第i个元素,临时变量值赋给第k个元素,如此完成两个元素的交换。