免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: picktracy
打印 上一主题 下一主题

奇怪的Stack Overflow [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-15 19:20 |只看该作者
那对于有序序列不退化的quicksort能指点一二么?^_^

论坛徽章:
0
12 [报告]
发表于 2006-04-15 20:09 |只看该作者
好像扩大初始栈区没有作用,反而更早的stack overflow,郁闷*_*
我用的vc6的编译器,默认1M,扩大到2M,还是没有解决问题
不过1M是在公司xp sp2下跑的,我自己的机器是2k3

论坛徽章:
0
13 [报告]
发表于 2006-04-15 20:35 |只看该作者
原帖由 picktracy 于 2006-4-15 19:02 发表
代码很长,截取部分估计。。。
大家看看吧
[code]
typedef struct tagLinkRecord {
        U16 Size;
        U16 Len;
        U32 LinkID;
        U32 Node;
        char* Name;
}LinkRec, *pLinkRec;

typedef struct tagLinkList { ...


1.在递归调用时,为了降低递归调用的栈深,往往采用在每次划分后先对较短段进行递归排序,然后再对较长段进行排序(在你的程序中加个判断就可以了)
2.LZ用的是数组,为什么写成链表结构(随便问问)?

论坛徽章:
0
14 [报告]
发表于 2006-04-15 21:28 |只看该作者
原帖由 picktracy 于 4/15/06 19:20 发表
那对于有序序列不退化的quicksort能指点一二么?^_^


你的代码选分割元素的部分用的都是pData[left]吧,
避免退化的一个途径就是选择一个尽量在有序后尽量靠中间的元素,
方法可以参考选择序列中位数的算法,55分割,
还有其他的google一下就可以找到了

论坛徽章:
0
15 [报告]
发表于 2006-04-16 09:19 |只看该作者
to ls两位:
嗯嗯,我再把程序改造下,谢谢了。
ps:用数组是为了空间换时间^_^

另:同样的程序(初始栈区为1M)在有的机器上可以顺利跑完,只是效率很低*_*
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP