送分+求教=你看到的这个帖子.

redleaves 2001-12-05 08:39:24
小弟我写了几个排序算法.用不同的编译器编译出结果都不一样.

int QSort(long * Start,long * End)
{
if (Start>=End)
return 0;
long * lStart=Start,* lEnd=End,Mid=*Start;
while (lStart<lEnd)
{
while(lStart<lEnd&&*lEnd>=Mid) lEnd--;
*lStart=*lEnd;
*lEnd=Mid;
while(lStart<lEnd&&*lStart<=Mid) lStart++;
*lEnd=*lStart;
*lStart=Mid;
}
QSort(Start,--lStart);
QSort(++++lStart,End);
return 1;
}

int QuickSort(long * Start,long * End)
{
if (Start>=End)
return 0;
long * lStart=Start,* lEnd=End,Mid=(*Start+*End)/2,temp;
while (lStart<lEnd)
{
if (*lStart>Mid&&Mid>=*lEnd)
{
temp=*lStart;
*lStart=*lEnd;
*lEnd=temp;
lStart++;
lEnd--;
}
else
{
if (*lStart<=Mid)
lStart++;
if (Mid<=*lEnd)
lEnd--;
}
}
if (lStart>lEnd)
{
lStart--;
lEnd++;
}
else
if (lStart==lEnd)
{
if (*lStart<Mid)
lEnd++;
else
lStart--;
}
if (Start<lStart)
QuickSort(Start,lStart);
if (lEnd<End)
QuickSort(lEnd,End);
return 1;
}

QSort是从书上抄的,QuickSort是我自己设计的.
可是在GCC 2.95.3-5 (cygwin)下QSort一直都很正确,QuickSort在有些情况下会出现内存(我想可能是堆栈)溢出.可是我用MS VC6.0或Intel C/C++ Compiler 5.0下编译出的结果刚好相反----QuickSort一直都很正确,QSort在有些情况下会出现内存溢出.我真是想破了脑袋也想不出为什么?还请高手指点!
不过直得自豪的是,我自己写的比书上的快很多,尤其是在数据中有很多重复时!:)
我想,如果把它们都改成非递归时可能还会快很多!
...全文
171 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
夭夭 2002-04-22
  • 打赏
  • 举报
回复
我是来要分的,
redleaves 2002-04-22
  • 打赏
  • 举报
回复
?
gxgxfish0813 2001-12-15
  • 打赏
  • 举报
回复
不会
redleaves 2001-12-15
  • 打赏
  • 举报
回复
TO Solstice(大佛):
不知道你所说的那个Introspective Sorting算法是什么样的.有没有什么资料可以给我看看?
我的EMAIL:scu319hy@263.net
redleaves 2001-12-15
  • 打赏
  • 举报
回复
TO eastsun():
++++a这种语句的编译结果是不会出错的,只有像a+++b这种才会错.因为++++a不存在二义性
而a+++b是存在二义性的.
eastsun 2001-12-15
  • 打赏
  • 举报
回复
你的代码在不同的编译器结果应该是不一样的,应该改成通用的程序。

象++这种语句应该单独成为一行。QSort(++++lStart,End);就是问题语句。
陈硕 2001-12-15
  • 打赏
  • 举报
回复
http://www.cs.rpi.edu/~musser/
redleaves 2001-12-14
  • 打赏
  • 举报
回复
TO Solstice(大佛):
你说的好像有些地方不是很对吧.
因为据数学分析的结果QSort的平均时间复杂度在理论上已经达到最优(内部排序中),是O(n*log(n)).在所有的O(n*log(n))的排序算法中它的系数是最小的.只是在有些特殊情况下它会蜕化为O(n*n).不过这种情况是可以通过改进算法避免的(我自己写的那个算法就避免了这种情况).
你所说的那种算法我不清楚,不过能达到O(n*log(n))的排序算法有很多.比如树形排序,堆排序,而且这两种排序都是在所有情况下的时间复杂度均一定为O(n*log(n))的.
对于改成递归后它能快多少,我不清楚.不过它的确是能快很多.以前我写过一个码制转换的程序.在改成非递归后快了近十倍.
关于我的程序缩进的问题,我也没有办法.CSDN不支持TAB.

TO kinghawk(雪鹰):
编译器不同所造成的编译结果不同是正常的.不过这种情况一般只会出现C/C++标准中没有定义到的地方,如编译后存储结构.而对于同种算法的描述,只要不用到这些特殊的部份,应该不会发生这种情况.我现在所遇到的情况是我从开始写程序到现在10多年中头一次遇到的.只恨自己不了解VC和GCC编译器的内部结构.
陈硕 2001-12-14
  • 打赏
  • 举报
回复

改成非递归并不会快多少,SGI STL的sort()就是用递归写的。

你这种“最普通”的快速排序,只能练练手,没有什么实用价值。

据我所知,目前最好的排序算法是Musser在1997年提出的Introspective Sorting,可以在几乎所有情况下做到O(n*log(n))。

你的程序没有缩进,没法看。
陈硕 2001-12-14
  • 打赏
  • 举报
回复
SGI STL中的sort()就是用 Introspective Sorting 加 递归 实现的,有不少优化措施,我没有全看懂。

introsort与quicksort的平均性能相当,但在最不利的情况下,前者也不会蜕化为O(n*n),所以STL才选用introsort。
kinghawk 2001-12-14
  • 打赏
  • 举报
回复
编译器不同,编译结果不同是正常的,特别是VC,有时同一个程序用debug和release模式编译出的结果都不同。
虽然将递归转化为非递归可以提高一定的速度,但是对于你的精力和时间来说,是不是划得来就看你自己了!
redleaves 2001-12-13
  • 打赏
  • 举报
回复
为什么每次我提的问题都没有人能帮我解决呢?
fiddleman 2001-12-13
  • 打赏
  • 举报
回复
搞吾懂~~~~~~ :(((
meng_tenboy 2001-12-13
  • 打赏
  • 举报
回复
感兴趣
redleaves 2001-12-13
  • 打赏
  • 举报
回复
TO chulizhi(楚立志):
发什么给你?我的编译器吗?我只是考虑编译器不同的原因,因为我对我的程序的正确性很有自信.
这里谢过你的好意.
j_md 2001-12-13
  • 打赏
  • 举报
回复
这个问题我也想问呀!!可怜的无心红叶!!
chulizhi 2001-12-13
  • 打赏
  • 举报
回复
我是有兴趣看,不过现在没有时间,如果你着的有诚意,就发邮件到chulizh@163.com
再见
redleaves 2001-12-12
  • 打赏
  • 举报
回复
不是吧!
给150分也没有人来看?
就当是散分吧!想要分的就留个名吧!
jhhxxdj 2001-12-10
  • 打赏
  • 举报
回复
那你就用你觉得正确的编译器编译好了
redleaves 2001-12-10
  • 打赏
  • 举报
回复
没有人感兴趣么?
没有人要分么?
唉!
.......
.......
加载更多回复(4)
软件介绍: 一个非常详细的与众不同的图文联盛UT165量产教程,格式为PDF在网上我们经常看到网友求教联盛 UT165 芯片的 U 盘,在量产后不能正常冷启动,不能正常使用(装系统或工具)的帖子。本人也正是遇到了这样的问题,开始找教程查资料,最终彻底解决啦。现在跟 大家共同探讨,交流,分享。需要指出的是,很多朋友未能量产成功或量产成功后不能正常使用。都与 UT165 量产工具的使用和设 置有着直接的关系。尤其是设置。这一点是由 UT165 芯片的特点所决定的,它不同于其他类型的芯片。在量 产后产生 2 个分区。即一个隐藏了的量产后装有 XP 系统或维护工具的分区,另一个则是 U 盘量产后的剩 余分区。而 UT165 芯片的 U 盘要是量产成 2 个区,大多数都不能使用(或不能冷启动)。网上也有很多帖 子说量产 2 个区成功的,但我好几个 UT165 的 U 盘没有一个成功的不知原因何在?可是要把 UT165 量产成 1 个分区,是绝对可以量产成功的。但是代价却是:不管你的 U 盘容量是多大,量产后只存在 XP 系统 或维护工具大小所占容量,其它剩余容量不副存在。(当然,还可以恢复回去)因为只有一个分区吗。下面详细介绍过程: 用到的工具:芯片检测工具 ChipGenius量产工具:群联 V1.65.28.1我的 U 盘芯片型号如图;.............................

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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