【编程练习题】 本章编程练习题中的顺序表和线性链表的类型和第9章相同。 1.
试以 L.r[k+1] 作为监视哨改写10.2.1节中给出的直接插入排序算法。其中, L.r[1..k] 为待排序记录且 k<MAXSIZE 。
2. 试编写如下说明的静态链表完成链表插入排序的算法。 typedef struct typedef struct void SLinkInsertSort(SLinkList &f) 3. 荷兰国旗问题:设有一个仅由红、白、兰这三种颜色的条块组成的条块序列。请编写一个时间复杂度为O(n)的算法,使得这些条块按红、白、兰的顺序排好,即排成荷兰国旗图案。 4. 已知(k1,k2,…,kp)是堆,则可以写一个时间复杂度为
O(logn) 的算法将(k1,k2,…,kp,kp+1)调整为堆。试编写"从
p=1 起,逐个插入建堆"的算法,并讨论由此方法建堆的时间复杂度。 5. 2-路归并排序的另一策略是,先对待排序序列扫描一遍,找出并划分为若干个最大有序子列,将这些子列作为初始归并段。试写一个算法在链表结构上实现这一策略。 6. 序列的"中值记录"指的是:如果将此序列排序后,它是第个记录。试写一个求中值记录的算法。 | 【编程练习题】 |