问答题 下列给定程序中,函数fun()的功能是:将n个无序整数从小到大排序。请改正程序指定部位的错误,使它能得到正确结果。  注意:  不要改动函数main(),不得增行或删行,也不得更改程序的结构。/**********code.c**********/#includ<stdio.h>voifun(innin*a){  ini,j,p,t;  for(j=0;j<n-1;j++)  {    p=j;    /**********found**********/    for(i=j+1;i<n-1;i++)      if(a[p]>a[i])        /**********found**********/        t=i;    if(p!=j)    {t=a[j];a[j]=a[p];a[p]=t;}  }}voiputarr(innin*z){  ini;  for(i=1;i<=n;i++,z++)  {    printf("M",*z);    if(!(i_x0010_))      printf("");  }  printf("");}voimain(){  inaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;  printf("Beforsortin%numbers",n);putarr(n,aa);  fun(n,aa);  printf("Aftesortin%numbers",n);putarr(n,aa);}/**********-code.c**********/
【正确答案】
【答案解析】(1) for(i=j+1;i<n;i++)(2) p=i;
错误(1):选择排序法是在外循环中从第一个元素开始,依次与比它小的元素进行交换,直到交换完第n-1个元素,最后一个元素就是最大的元素,循环次数为n-1次,如果设定循环次数为n次,则最后一次第n个元素与自己交换;内循环是找出比当前元素更小的元素,故是从当前需要交换的元素的下一个元素开始,直到第n个元素。故for(i=j+1;i<n-1;i++)应改为for(i=j+1;i<n;i++)。  错误(2):t是fun函数中用来交换两个元素的辅助变量,不是交换元素下标的变量,因此t=i;是错误的。p是用来记录当前最小元素下标的,当a[p]>a[i]时,把i赋给p。所以“t=i;”应改为“p=i;”。