下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构. 试题程序: #include <String.h>#include <stdio.h> #define N 80 void insert(char *aa) { iht i, j, n; char ch; n=strlen (aa); for (i=1; i<n; i++) /**********************************/ { c=aa[i];j=i-1;while ((j>=0) && (ch<aa [j] )) { aa [j+l]=aa[j];j--; } aa [j+l]=ch; } } main ( ) { char a [N] = "QWERTYUIOPASDFGHJKIMNBVCXZ"; int i; printf("The original string: %s\n",a); insert (a); printf("The string after sorting: %s\n\n", a); }
参考答案:错误:c=aa[i] 正确:ch=aa[i];
解析: 对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持升序。这样循环后,就可以得到全部元素的排序。