还有题目要请教!!!

yongheng1874 2006-07-18 07:54:57
下面是一个快速排序函数:
MAXCHARS = 31



---------------------------------------------------------
void quicksort(char data[][MAXCHARS], int low, int high)
{
int i,j;
char *pivot = (char*)malloc( MAXCHARS * sizeof( char ));

printf( "pivot : %s , %d \n " , pivot, strlen(pivot) ); //这里竟然不是31,而是输出35!为什么?

if( low < high )
{

strcpy( pivot, data[low] );
i=low;
j=high;

while( i < j )
{
while( i < j && strncmp(data[j], pivot, 13 ) )
{
j--;
}
if( i < j )
{
strcpy(data[i++], data[j]);
}
while( i < j && strncmp( pivot, data[i], 13 ) )
{
i++;
}
if( i < j )
{
strcpy( data[j--], data[i]);
}
}

strcpy( data[i], pivot);

quicksort( data, low, i-1 );
quicksort( data, i+1, high);

}

}

调用处:
char buffer[MAXROWS][MAXCHARS];
quicksort( buffer, 0, 10) ;

-------------------------------------
结果是运行后,正常,但没起排序效果!!问题出在什么地方呢?
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongheng1874 2006-07-18
  • 打赏
  • 举报
回复
多谢大家,特别是UPCC(杂食动物) !谢谢你们.
Dong 2006-07-18
  • 打赏
  • 举报
回复
while( i < j && strncmp(data[j], pivot, 13 ) )
{
j--;
}
------------------------------------
这个有点问题,strncmp(data[j], pivot, 13 )只要两个字符串不相等的话就是true的,没有正负之分。
fflush 2006-07-18
  • 打赏
  • 举报
回复
strncmp 对两个字符串比较,前者大于后者时返回值大于0,后者大于前者时返回值小于0,相等时等于0,所以如下的代码
while( i < j && strncmp(data[j], pivot, 13 ) )
{
j--;
}
并不能达到lz所希望的效果

另外顺便说一下
printf( "pivot : %s , %d \n " , pivot, strlen(pivot) ); //这里竟然不是31,而是输出35!为什么?
这里并没有对pivot进行初始化,所以这里输出什么完全是undefined
Dong 2006-07-18
  • 打赏
  • 举报
回复
printf( "pivot : %s , %d \n " , pivot, strlen(pivot) ); //这里竟然不是31,而是输出35!为什么?
------------------------------
因为strlen()是遇到'\0'的时候结束结算,所以他的长度不一定是分配的长度,
一般在分配后要初始化,memset(pivot,0,MAXCHARS);
这时strlen(pivot)就是0了。
chenhu_doc 2006-07-18
  • 打赏
  • 举报
回复
1, 自己用vc++ 中单步调试看窗口信息吧 编译后 f10开始,f11进入相应行的函数块中...
2, 偶的课程设计就是这个!

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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