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