朋友问到的考研试题,请各位帮帮忙!谢谢

daipeanut 2006-01-12 08:59:04
中山大学
二00三年攻读硕士研究生入学考试试题

15.稳定的排序算法是()。
A.插入排序 B. 选择排序
C.堆排序 D. 快速排序

感觉在这里AB都对啊,可又是单选题,A直接插入排序的时间复杂度为O(n2),是一个稳定的排序方法。
选择排序也是一种稳定的排序. D是冒泡排序的改进,C是选择排序的改进.

3.(5分)在数组A[0..n-1]中存放有n个不同的整数,其值均在1到n之间。写出一个函数或过程,将A中的n个数从大到小排序后存入B[0..n-1]数组中。要求算法的时间复杂度为o(n)。

快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。
觉得没有哪个排序算法的时间复杂度可以达到O(n),
好象对于整数的排序可能用基数排序,又叫桶排序,可它的时间复杂度为o(2mn)。
其中m为整数的位数,如2451,此时m=4,
但是对于不确定的整数,我们无法指定m的值


请这里的朋友解答一下,不是为别的,只是有朋友上次问题到过.
也算法是提高一下吧!谢谢!

还有下面一个也有点模糊.
2.(10分)一个二叉树以二叉链表存储。写一函数或过程打印该树,要求打印格式为(key0,ltree,rtree),其中key是根节点的数据值,ltree和rtree分别是相同格式的左右子树。叶子节点打印为(key)。

这里应该就是前序遍历吧?怎么看起来这么别扭啊?
...全文
389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
solitu699 2010-06-19
  • 打赏
  • 举报
回复
for(i=0;i <n;i++)
B[n-A[i]]=A[i];

有点小问题,应该是B[n-1-A[i]]=A[i];
defyer007 2006-03-21
  • 打赏
  • 举报
回复
同意楼上的...
yangfasheng 2006-03-18
  • 打赏
  • 举报
回复
(五)、在学校要注意培养实际动手能力
加强实践环节和动手能力的培养
•#!•最主要的课题 !!!
(当然,这里的目的不要要看他们当中有没有人会做。而是让听众(学生)自己反醒一下,自己平时有没有动过手,写过程序,有没有动脑筋想过问题,引导他们,让他们在以后的学习过程中,既要学习理论基础,也要训练自己的思维能力,动手能力)

1. 编写strcat函数,已知strcat函数的原型是
char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?

2. 写一个处理函数,从键盘接收一个字符串。然后按照字符串顺序从小到大进行排序,并删除重复字符。用你最擅长的编程语言实现。要求程序简练,所使用的局部量变的个数尽量少。
3. 给出一个字符串,要求编写一个函数,实现把这个函数所有的大写字母都转换成小写。
4.
问题应该是很简单,可是请问问我们自己,我怎么来实现它呢?你是否一来就动手写一个C,或Java程序。还想了好久之后却依然不知道如何下手。
问题就在于大家平时很少动手写程序,甚至有的同学在学完C语言程序设计这本教材之后却从来都没有写过一个程序,或是没有在电脑上运行过,也有只是照着书上的例子看了一遍又一遍,在纸上也写了好几遍。可是当我们拿到一个新的编程问题时,还是不知道怎么入手。

为什么我们不但写不出高效简洁的可运行程序?甚至于连教材上的编程练习题也做不好?我们可能有过这样的经历,练习题看起来不是很难,可是要真的动起手来却无从下手。
遇到稍微复杂一点问题就更加束手无策。大家平时可能喜欢玩游戏,可是你有没有想过一个游戏时如何来实现它呢?比如扫雷游戏,如果让你来作,你应该按什么样的步骤一步步地将它在PC机上实现。
(唉,写到这里我实在是不知道应该怎么办啦。头痛的利害,看了一天的电脑,眼睛都花啦!我得回去啦,明白见。)
aifudi 2006-01-16
  • 打赏
  • 举报
回复
B 当然会出现不稳定的情况 例如 2' 2 1 三个关键字进行选择排序的结果为1 2 2' 记得老严的书上说选择排序是稳定的 个人认为不正确
daipeanut 2006-01-16
  • 打赏
  • 举报
回复
属于选择排序
Code100000 2006-01-13
  • 打赏
  • 举报
回复
堆排序 属于A还是B?
daipeanut 2006-01-13
  • 打赏
  • 举报
回复
to:回复人: wvins(逸岚) ( ) 信誉:99

我只是有点疑惑,知道是前序遍历那问题就不难

在C程序设计中多为PreOrder(BTree *bt),可以是递归,也可以用非递归

to:
回复人: Code100000()()()()()()()()()()()()()()()()()()()()()()()()(烟) ( ) 信誉:
我就是无法区分A,B
Code100000 2006-01-13
  • 打赏
  • 举报
回复
1.堆排序是不稳定的.
严蔚敏 《数》P289---(4)
Code100000 2006-01-13
  • 打赏
  • 举报
回复
前序遍历
yelling 2006-01-12
  • 打赏
  • 举报
回复
15 A
B有可能出现不稳定情况

3 在数组A[0..n-1]中存放有n个不同的整数,其值均在1到n之间。
那就是1,2,3,....n这n个数
这样的话,直接用地址链到下标,也可以理解为是hash

for(i=0;i<n;i++)
B[n-A[i]]=A[i];

2.preout(tree &t)
{
if(t==NULL)
return
std::cout<<t.key;
if(t->ltree) std::cout<<t->ltree;
else std::cout<<"NULL";
if(t->rtree) std::cout<<t->rtree;
else std::cout<<"NULL";
std::cout<<std::endl;
preout(t->ltree);
preout(t->rtree);
}
yangfasheng 2006-01-12
  • 打赏
  • 举报
回复
Mark
有时间看
wvins 2006-01-12
  • 打赏
  • 举报
回复
show(tree)
{if(tree==NULL) return;
cout<<"("
<<tree->key
<<",";
show(tree->ltree)
cout<<",";
show(tree->rtree)
cout<<")";
}
wvins 2006-01-12
  • 打赏
  • 举报
回复
show(tree)
{cout<<"("
<<tree->key
<<",";
show(tree->ltree)
cout<<",";
show(tree->rtree)
cout<<")";
}
就用前序遍历不行吗?
楼主试过了吗?
daipeanut 2006-01-12
  • 打赏
  • 举报
回复
15 A
B有可能出现不稳定情况

能不能解释一下.???????
chenkejun 2006-01-12
  • 打赏
  • 举报
回复
比楼上晚了一步,可惜可惜。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧