问答题 编写算法实现以被分类序列中所有元素的平均值为界值的快速分类方法。
【正确答案】
【答案解析】取平均值,将所有关键字与平均值进行比较,若小于平均值则属于左半部;否则就属于右半部。
int Partition(RecType r[],int l,h)
{
int i=l,j=h,avg=0;
for(;i<=h;i++)
avg+=R[i].key;
i=l:
avg=avg/(h-1+1);∥求得平均值
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];
}
if(R[i].key<===avg)
return i;
else
return i-1;
}
void quicksort(RecType R[],int S,T);
{
if(S<T)
{
k=partition(R,S,T);
quicksort(R,S,k);
quicksort(R,k+1,T);
}
}