閱讀以下說明和 C 函數(shù),填充函數(shù)中的主缺,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
下面的函數(shù) sort(int n,int a[])對保存在數(shù)在a中的整數(shù)序列進行非遞減排序。由于該序列中的元素在一定范圍內(nèi)重復(fù)取值,因此排序方法是先計算出每個元素出現(xiàn)的次數(shù)并記錄在數(shù)組b中,再從小到大順序地排列各元素即可得到一個非遞減有序序列。例如, 對于序列 6,5,6,9,6,4,8,6,5. 其元素在整數(shù)區(qū)間 [4,9]內(nèi)取值,因此使數(shù)組元素 b[0] ~b[5]的下標。0~5分別對應(yīng)數(shù)值4~9. 順序地掃描序列的每一個元素并累計其出現(xiàn)的次數(shù),即將 4的個數(shù)記入b[0],5的個數(shù)記b[1],依此類推,9的個數(shù)記入b[5]最后依次判斷數(shù)組b的每個元素值,并將相應(yīng)個數(shù)的數(shù)值順序地寫入結(jié)果序列即可。
對于上例,所得數(shù)組 b 的各個元素值如下:
那么在輸出序列中寫入 1 個 4、2個 5、4個 6、1 個 8、1 個 9,即得4,5,5,6,6,6,6,8,9,從而完成排序處理。
【C 函數(shù)】
void sort(int n ,int a[ ])
{ int *b;
int i ,k ,number;
int minimum = a[0] , maximum = a[0];
/* minimum 和 maximum 分別表示數(shù)組a的最小、最大元素值*/
for(i=1;i<n;i++){
if( (1) ) minimum=a[j];
Else
if( (2) ) maximum=a[i];
}
number = maximum - minimum + 1;
if (number<=1) return;
b = (int *)calloc (number ,sizeof(int)) ;
if (!b) return;
for(i=0;i<n;i++){ /* 計算數(shù)組a元素值出現(xiàn)的次數(shù)并計入數(shù)組b */
k=a[i]-minimum; ++b[k];
}
/*按次序在數(shù)組 a 中寫入排好的序列*/
i=(3) ;
for( k=0; k<number; k++ )
for(; (4) ; --b[k] )
a [i++] = minimum +(5);
}