问答题 快速排序算法中,如何选取一个界值(又称为轴元素),影响着快速排序的效率,而且界值也并不一定是被排序序列中的一个元素。例如,我们可以用被排序序列中所有元素的平均值作为界值。编写算法实现以平均值为界值的快速排序方法。

【正确答案】[解答]
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);
}
}
【答案解析】[解析] 保存划分的第一个元素。以平均值作为枢轴,进行普通的快速排序,最后枢轴的位置存入已保存的第一个元素,若此关键字小于平均值,则它属于左半部,否则属于右半部。