1、从供选择的答案中,选出应填入下面的有关排序的算法复杂性叙述中
______内的正确答案。
把编号写在答案的对应栏内。
对由n个记录所组成的表按关键码排序时,下列各常用排序算法的平均比较次数分别是:
二分法插入排序为___A___,
冒泡排序为____B___,
快速排序为___C_____,
插入排序___D____,
二分法检索为____E____。
A~E为:
1)O(1)
2) O(nlog2n)
3) O(n)
4) O(n2)
5) O(n(log2n)2)
6) O(log2n)
2、编写一个函数,对于给定的正整数N和M(N<M>),打印出所有满足条件I1+I2+.....+IN=M的正整数序列
I1,I2,....IN,其中I1>I2>.....IN。例如N=4,M=8时,打印结果如下:
5 1 1 1
4 2 1 1
3 3 1 1
3 2 2 1
2 2 2 2
[此贴子已经被作者于2007-1-30 17:25:07编辑过]
----------------解决方案--------------------------------------------------------
不是我们不帮助你,请看
http://bbs.bc-cn.net/viewthread.php?tid=41519
不要总指望别人的帮助,你将全部的题发上来,是你学习还是我们学习?是你获得知识还是我们获得知识?是你在考试复习还是我们在考试复习?学习在于自己勤学苦练,而不是依靠他人.
我希望你能改变这种心态,真正的学到知识,那样,在这里将不懂的题提出来,我们会十分乐意的帮助你
----------------解决方案--------------------------------------------------------
你将全部的题发上来,是你学习还是我们学习?
题目有上百道呢!我根本就没有全部发上来呀。能找到答案的,或者我能做出来的,我都思考作出来了。剩下的这些题,
要是我能找到答案,根本就不会费这个劲敲上来。这只会让我更浪费时间,不是吗?
有可能你是高手,你觉得这种简单问题根本不值得回答。
可是对于像我这种低手,确实有困难。
你可以选择不帮助我,但我还是要谢谢你们为我们这些还在成长学习中的人们提供一个平台,
但是可能我们以后会想一想才敢把这些你们认为根本不值得回答的问题发上来。
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
1.
辅助空间 时间复杂度
直接插入排序:1 O(n2)
折半插入排序:1 O(N2)
2-路插入排序:n O(N2)
希尔排序: 1 O(N3/2)
冒跑排序: 1 O(N2)
快速排序: Llog2nL+1 O(nlog2n)
简单选择排序:1 O(N2)
堆排序: 1 O(nlog2n)
归并排序: O(N) O(nlog2n)
基数排序 : O(rd) O(d(n+rd))
对不起,误会了
主要是现在这样的人太多了,而我十分不喜欢那种方式
非常抱歉,我会尽力帮你解答
[此贴子已经被作者于2007-1-30 20:47:37编辑过]
----------------解决方案--------------------------------------------------------
二分法插入排序因为移动记录的总次数不受改变,其时间复杂度仍为O(n2);
冒泡排序为O(n2);
快速排序的平均时间复杂度为0 (nlog2 n )
插入排序O(n2);
二分法检索时间复杂度为0(log2n),
----------------解决方案--------------------------------------------------------
感动斑竹
----------------解决方案--------------------------------------------------------
、编写一个函数,对于给定的正整数N和M(N<M>),打印出所有满足条件I1+I2+.....+IN=M的正整数序列
I1,I2,....IN,其中I1>I2>.....IN。例如N=4,M=8时,打印结果如下:
5 1 1 1
4 2 1 1
3 3 1 1
3 2 2 1
2 2 2 2
这个题可以
1。I1和I2+2比较大小
2。I2和I3+2。。。。IN的比较大小
3。I1和IN+2的比较大小
1。条件成立 则I1=I1-1 I2=I2+1 然后输出I1。。。IN
2。条件成立 则I2=I2-1 I3=I3+1........I2=I2-1 IN=IN+1 然后输出I1。。。IN
3. 条件成立 则I1=I1-1 IN=IN+1 然后输出I1。。。IN
我着个方法应该是很容易懂的吧
----------------解决方案--------------------------------------------------------
对了
那个方法是用数组来做的
I1==A[0] I2==A[1]。。。。IN==A[N-1];
A[0]=M-N+1;
数组A其他的位置先副值1
然后开始比较
不懂的话 我就给你写出来
[此贴子已经被作者于2007-2-1 15:13:41编辑过]
----------------解决方案--------------------------------------------------------
这个对不?
int x;
int y;
int a[20];
void fun(int sum,int m,int n)
{
int i;
if(n<=0)
{
if(x==sum)
{
for(i=0;i<y;i++)
printf("%4d",a[i]);
printf("\n");
}
return;
}
for(i=m;i>0;i++)
{
a[y-n]=i;
fun(sum+a[y-n],i,n-1);
}
}
----------------解决方案--------------------------------------------------------