首页 > 题库 > 职业考证 > 软考 > 程序员 > 案例题

阅读以下说明和C代码,填写程序中的空缺,将解答写入答题纸的对应栏内。
【说明】
规定整型数组a中的元素取值范围为[0,N),函数usrSort( int n, int a[] )对非负整型数组a的前n个元素进行计数排序。排序时,用temp_arr[i]表示i在数组a中出现的次数, 因此可以从0开始按顺序统计每个非负整数在a中的出现次数,然后对这些非负整数按照从小到大的顺序,结合其出现次数依次排列。
例如,对含有10个元素{0,8,5,2,0,1,4,2,0,1}的数组a[]排序时,先计算出有3个0、2 个1、2个2、1个4、1个5和1个8,然后可确定排序后a的内容为{0,0,0,1,1,2,2,4,5,8}。
下面代码中用到的memset函数的原型如下,其功能是将p所指内存区的n个字节都设置为ch的值。

void*memset (void *p, int ch, size_t n);


【C代码】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


#define N 101


void printArr(int a[],int n);
void usrSort(int n,int a[]);


int main()
{
      int a[10]={0,8,5,2,0,1,4,2,0,1};

       printArr (a,sizeof(a)/sizeof(int));
     (   1  )     _;             //调用usrSort()对数组a进行升序排序
printArr ( a,sizeof(a)/sizeof(int) );
return 0;
}
void printArr (int a[],int n)
{
     int i;
     for(i=0;i<n;i++)
             printf("%d ", a[i]);
     printf("\n");
}

void usrSort(int n, int a[])
{
      int i,k;
      int *temp_arr;        //用temp_arr[i]表示i在a中出现的次数
      temp_arr=(int *)malloc(N*sizeof(int) );
      if(!temp_arr) return;
      //将所申请并由temp_arr指向的内存区域清零
     memset(_   (2)   _);
     for(i=0;i<n;i++)
           temp_arr[_(  3   )    ]++;
     k=0;
     for(i=0;i<N;i++){
           int cnt;                          //cnt表示i在数组a中的出现次数
    (  4   )  ;
          while(cnt>0){
                    a[k]=i;                //将i放入数组a的适当位置
   (   5   )  ;
                    cnt--;
           }
     }
     free(temp_arr);
}



参考答案: 查看答案 查看解析 查看视频解析 下载APP畅快刷题

相关知识点试题

相关试卷