1. 编写程序JOSEPHUS.C。N(<100)个小孩围成一圈,并给他们依次编号,老师指定从第S个小孩开始报数,报到第M个小孩出列,然后从下一个小孩开始报数,依次重复下去,直到所有的孩子都出列,试输出小孩的出列顺序。
要求:
(1) N、S、M从命令行输入,将小孩的出列顺序输出到屏幕和JOSEPHUS.DAT文件中。
(2) 用结构数组实现:struct child { int nextp; /* 指向下一个小孩 */
int num; /* 小孩的号码 */
} link[100];
2.编写希尔排序程序SHELL.C。
希尔排序的基本思想是:先将整个待排序中的n个元素序列分割成若干个子序列分别进行排序,待整个序列中的元素“基本有序”时,再对全体记录进行一次排序。具体操作是:首先取增量d1=n/2,所有距离为d1倍数的元素进行比较排序,然后取d2=d1/2,重复上述分组和排序,直至取di=1,进行一次比较排序后,所有元素将正确排好序。
例如,要把下列数据元素按升序排列,则希尔排序的过程如下图所示。
12 19 25 34 65 74 75 76 d3=d2/2=1
图 希尔排序过程
要求:
(1) 待排序的数据个数n和数据放在文件SHELL.IN中。
(2) 从命令行输入文件名SHELL.IN,根据SHELL.IN中的待排序数据个数n,对接收数据的指针变量*v进行动态内存分配。
(3) 将输入的待排序数据按一行5个数据显示在屏幕上。排序结果输出到屏幕上的同时输出到文件SHELL.OUT中。