【正确答案】[解答]
int partition(PecType r[],int low,int high){
int i=low,j=high,avg=0;
for(;i<=high;i++) avg+=R[i] key;
i=low;
avg=avg/(high-low+1);
temp=R[low];
while(i<j){
while(i<j && R[j].key>=avg)j--;
if(i<j)R[i]=R[j];
while(i<j && R[i].key>=avg)i++;
if(i<j)R[j]=R[i];
}
R[i]=temp;
if(R[i].key<=avg)return i;
else return i-1;
}
void quicksort (RecType R[],int S,int T);{
if(S<T){
k=partition(R,S,T);
quicksort(R,S,k);
quicksort(R,k+1,T);
}
}
【答案解析】[解析] 保存划分的第一个元素。以平均值作为枢轴,进行普通的快速排序,最后枢轴的位置存入已保存的第一个元素,若此关键字小于平均值,则它属于左半部,否则属于右半部。