问答题 若待排序列用单链表存储,试给出其快速排序算法。【北京邮电大学2000七(15分)】
【正确答案】正确答案:快速排序一般用顺序存储结构实现,但其思想也可以在链表中实现。需要记住的是,待排序链表部分的首尾指针,设start是链表指针,end是链表的尾指针,初始调用时为null。 if(start==null|| start==end)return;//空表或只有一个结点 start1=endl=start; //start1和end1是右半链表头结点的前驱和尾结点的指针 if(endl!=end)flag=1; p=start一>next; //p为工作指针 while(flag) //进行一趟快速排序,flag是结束排序的标志,初值为0 {if(p一>datadata) //结点插入前一半 {endl一>next=p->next; //保留后继结点 if(p:=end)flag=0; //一趟快速排序结束 if(start==end1) end0=p; //end0是遍历遇到的第一个小于枢轴的结点,将为前半的尾结点 p>next=start; start=p; //修改左半部链表头指针 p=end1一>next; //恢复当前待处理结点 } else //处理右半部链表 {if(p==end)flag=0; //已到链表尾 endl一>next=p;endlip; //endl和P是前驱和后继关系 p=p一>next; }//else }//while LinkQuickSort(start,end0); //对枢轴元素最终位置前的单链表快速排序 LinkQuicksort(start1一>next,end1); //对枢轴元素最终位置后的单链表快速排序
【答案解析】