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中。
----------------解决方案--------------------------------------------------------
怎么没人帮我
----------------解决方案--------------------------------------------------------
最讨厌让别人做作业的人
----------------解决方案--------------------------------------------------------
关于希尔排序只给你算法,你自己改吧
void shellsort(int v[],int n)
{ int gap,i,j,temp;
for(gap= n/2;gap>0;gap/=2)
for(i=gap;i<n;i++)
for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap){
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
}
----------------解决方案--------------------------------------------------------
我不会,只好帮你顶一下了,呵呵
----------------解决方案--------------------------------------------------------
谢谢了,老师一点都没讲过的,要我们作,我是想先读读源程序,读懂后在自己写~~
----------------解决方案--------------------------------------------------------
学C老师不能没给讲过结构体吧,,狂汗,,,怎么说现在也是一个学期末了,你不用考试的吗?
----------------解决方案--------------------------------------------------------
如果数是这样的: 75 74 25 34 76 65 19 12 75 65 19 12 76 74 25 34 d1=n/2=4 19 12 65 75 25 34 74 76 d2=d1/2=2 12 19 65 75 25 34 74 76 d3=d2/2=1 怎么会是这个样子?是不是我哪里理解错了?帮解释一下啊
----------------解决方案--------------------------------------------------------
讲到了数组和指针,但都是皮毛呀,后面就全没讲过了!!
现在要我们作课程设计呀!
真是苦呀~~
----------------解决方案--------------------------------------------------------
都什么社会了还指望跟老师学知识啊,自学才是硬道理
----------------解决方案--------------------------------------------------------