【正确答案】设对记录R[1..n]进行快速排序,要求用非递归算法。利用一个包含有low和high两个整数成员的记录数组stack[]作为栈,low和high成员分别指示某个子文件的首、尾记录的下标号。算法如下:
void quicksort(SeqList R,int n){//设待排序记录放在R[1..n]中,下标从1开始
int i,j,low,high,top=0;
struct{
int low,high;
}stack[Max]; //Max为一个大于n的常量
RecType temp;
top=1;stack[top].low=1;stack[top].high=n;//入栈
while(top>0){ //栈非空,则取出一个子文件进行划分
low=stack[top].low;high=stack[top].high;top一一;//出栈
i=low;j=high;temp=R[i];
do{
while(i<j&&R[i].key>temp.key)j--;
if(i<j){
R[i]=R[j];i++;
while(i<j&&R[i].key<temp.key)i++;
if(i<j){R[j]=R[i];j一一;}
}
}while(i==j); //划分结束
R[i]=temp; //基元元素插入
if(i+1<high){ //右子文件有两个以上记录,则首、尾位置入栈
top++:stack[top].low=i+1;stack[top].high=high;
}
if(low<i一1){ //左子文件有两个以上记录,则首、尾位置入栈
top++;stack[top].low=low;stack[top].high=i一1;
}
}
}
【答案解析】