关于递归调用的指针参数问题

whywuqi 2016-03-15 06:31:01
刚开始学习c编程,对照《啊哈!算法》写了一下快速排序的小程序,但是在递归调用的时候,codeblocks报错,没想明白,大家帮忙看看!

#include <stdio.h>
#define N 10
void quicksort(int left, int right, int *p);

int main(void)
{
int i;
int integer[N]={6,1,5,2,9,10,8,7,4,3};

quicksort(0,N-1,integer);

for(i=0;i<N;i++)
printf("%d ",integer[i]);

return 0;
}

void quicksort(int left, int right, int *p)
{
int i,j,t,temp;

temp=p[left];
i=left;
j=right;

while(i<j)
{
while(p[j]>=temp&&j>i)
j--;
while(p[i]<temp&&j>i)
i++;
if(i<j)
{
t=p[j];
p[j]=p[i];
p[i]=t;
}
}

if(i==j)
{
p[left]=p[i];
p[i]=temp;
}
quicksort(left,i-1,p); //单步调试时,在这里报错,不知道原因。
quicksort(i+1,right,p);
}
...全文
399 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-16
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
paschen 2016-03-16
  • 打赏
  • 举报
回复
递归一直没得到退出,直到栈溢出
whywuqi 2016-03-15
  • 打赏
  • 举报
回复
引用 2 楼 liehu232 的回复:
递归函数没有出口,在if i==j 里面加上return退出函数
的确是没有出口的问题,但不是在if(i==j)里加return,条件应该单独写出来,

if (left>right)
return ;
前面的判断条件也要改了,  while(p[i]<=temp&&j>i) 才对
whywuqi 2016-03-15
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiangDavaid 的回复:
快速排序 http://blog.csdn.net/zhangxiangdavaid/article/details/25436609
内容很丰富,我好好看看。谢谢
liehu232 2016-03-15
  • 打赏
  • 举报
回复
递归函数没有出口,在if i==j 里面加上return退出函数

69,364

社区成员

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

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