社区
数据结构与算法
帖子详情
如何对很长的链表就地排序?
vc_tapi
2005-09-04 04:47:24
链表很长,几十M。不要用很多辅助空间,效率尽可能高。
这是一个知名公司的笔试题,当然要这样要求。首先不能让辅助空间是O(n). 其次,时间代价不能是O(n*n). 面的时候我感到这是一定可以做到的。
开始想用快速排序,但在链表上做快速排序很难,需要地址排序,但这样
辅助空间是O(n).
后来成功的改造了快速排序,在链表上可以做,基本不需要辅助空间。
面我的人比较满意,但是同时指出,由于是递归,N又比较大,栈会益处的。
希望在此看到高质量的算法。
...全文
285
15
打赏
收藏
如何对很长的链表就地排序?
链表很长,几十M。不要用很多辅助空间,效率尽可能高。 这是一个知名公司的笔试题,当然要这样要求。首先不能让辅助空间是O(n). 其次,时间代价不能是O(n*n). 面的时候我感到这是一定可以做到的。 开始想用快速排序,但在链表上做快速排序很难,需要地址排序,但这样 辅助空间是O(n). 后来成功的改造了快速排序,在链表上可以做,基本不需要辅助空间。 面我的人比较满意,但是同时指出,由于是递归,N又比较大,栈会益处的。 希望在此看到高质量的算法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gnefuil
2005-09-07
打赏
举报
回复
归并排序当然可以O(1)空间复杂度,需要复杂而巧妙的算法才能实现
vc_tapi
2005-09-07
打赏
举报
回复
"归并排序不错,O(1)的复杂度"
不可能吧,空间复杂度高。
基数排序.不错,适合于链表。
另外,如果是双向的链表,哪个给出堆排序的算发?想了好久。
skys712
2005-09-06
打赏
举报
回复
是链表的话,就把它改造成堆吧!
Zephyrzzz
2005-09-06
打赏
举报
回复
嗯,归并排序不错,O(1)的复杂度.键值不多的话,还可以基数排序.
DiabloWalkOnTheEarth
2005-09-06
打赏
举报
回复
快排应该不需要递归地嘛 ...
vc_tapi
2005-09-05
打赏
举报
回复
shell sort就是冒泡的优化,但在链表上不好,数量级高。
归并排序适合链表,有哪个给个改造好的算法?
另外,快速排序用栈消除递归,应该也不错。空间复杂度logN
vc_tapi
2005-09-05
打赏
举报
回复
good idea. but i wanna the code. here is my answer:
single linked list.
struct node {
int a;
struct node *next;
}
qsort(struct node *head, struct node *end){
struct node *p=head, *last=head;
if(head==end)
return;
for(; p!=end; p=p->next) {
if(p->a < last->a) {
swap(p, last);
last = last->next;
}
}
swap(head,last);
qsort(head, last);
qsort(last->next, 0);
}
void swap(struct node *p1,struct node *p2){
int temp ;
temp=p1->a;
p1->a = p2->a;
p2->a = temp;
}
seanzh
2005-09-05
打赏
举报
回复
以上所说都是递归的,依然会有栈溢出的问题,
为什么不考虑冒泡?对其进行改进后时间复杂度也不会达到n2
dext
2005-09-05
打赏
举报
回复
归并排序 改进一下应该可以符合要求。
gnefuil
2005-09-04
打赏
举报
回复
归并排序的空间复杂度可以是O(1)
vc_tapi
2005-09-04
打赏
举报
回复
归并排序的空间复杂度太高,考虑shell or quicksort but no recursive
gnefuil
2005-09-04
打赏
举报
回复
归并排序
MagicCarmack
2005-09-04
打赏
举报
回复
还是有一定难度滴...............
galois_godel
2005-09-04
打赏
举报
回复
好像笔试面试题都比较青睐链表
galois_godel
2005-09-04
打赏
举报
回复
如果是双向链表的话,把它改造成堆,
前项指针,后项指针当两个儿子用.辅助空间基本没有,
单项的话,要多O(n)个指针空间,
但如果节点内容比较大的话,指针空间可以忽略的。
数据结构
排序
PPT学习教案.pptx
2. **空间效率**:关注
排序
过程中额外需要的内存空间,如果辅助空间不随数据规模n增长,则称
排序
算法为就地
排序
,否则为非就地
排序
。 3. **稳定性**:如果
排序
后相等关键字的元素相对位置保持不变,那么
排序
算法就是...
c++基础练习之
链表
数据结构.zip
通过这些练习,学习者可以提升对
链表
操作的理解,包括插入、删除、合并、
排序
、查找以及特殊情况的处理。熟练掌握
链表
操作对于理解和解决问题具有很大的帮助,因为
链表
是许多复杂数据结构和算法的基础。
北京交通大学05年计算机考研辅导班笔记(数据结构类)
这是一个对
链表
进行就地修改的例子,对于理解
链表
操作很有帮助。 总结来说,北京交通大学2005年计算机专业考研辅导班的笔记主要讲解了算法的时间复杂度、原地工作算法的概念,以及线性表的基本操作,包括顺序表和...
数据结构常用算法.pdf
在提供的文件中,我们看到一系列与数据结构相关的算法题目,涵盖了
链表
、栈、队列、二叉树和
排序
等多种概念。下面,我们将详细讨论这些知识点。 1. **单
链表
中的结点计数**: 这个问题展示了如何遍历单
链表
来统计...
你必须知道的495个C语言问题
1.14 我似乎不能成功定义一个
链表
。我试过typedefstruct{char*item;NODEPTRnext;}*NODEPTR;但是编译器报了错误信息。难道在C语言中结构不能包含指向自己的指针吗? 1.15 如何定义一对相互引用的结构? 1.16 ...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章