应用题 16.设有一个数组中存放了一个无序的关键字序列K1,K2,…,Kn。现要求将Kn放在将元素排序后的正确位置上,试编写实现该功能的算法,要求比较关键字的次数不超过n。
【正确答案】 int Partition(RecType K[ ],int m,int n){
//交换记录子序列K[1..n]中的记录,使枢轴记录到位,并返回其所在位置
//此时,在它之前(后)的记录均不大(小)于它
int i=m,j=n,K[0]=K[j],x=K[j].key;
while(i<j){
while(i<j&&K[i].key<=x)i++;
if(i<j)K[j]=K[i];
while(i<j&&K[j].key>=x)j一一;
if(i<j)K[i]=K[j];
}//while
K[i]=K[0];
return i:
}
提示:此题考查的知识点是快速排序的思想。以Kn为枢轴的一趟快速排序。以最后一个关键字为枢轴先从前向后再从后向前快速排序。
【答案解析】