送分+求教=你看到的这个帖子.
小弟我写了几个排序算法.用不同的编译器编译出结果都不一样.
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在有些情况下会出现内存溢出.我真是想破了脑袋也想不出为什么?还请高手指点!
不过直得自豪的是,我自己写的比书上的快很多,尤其是在数据中有很多重复时!:)
我想,如果把它们都改成非递归时可能还会快很多!