用c语言解决快速排序算法,不用递归?

 我来答
蛀虫里的苹果
2011-08-17 · TA获得超过1037个赞
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:134万
展开全部
可以用循环代替啊。所有的递归都是可以用循环加堆栈一类的东西代替的。
但是那会比较恶心,恶心到连本人这么勤奋的好学生都不愿意写……
如果你竟然真的写了一遍,保证你写完之后这辈子不会再想写第二遍!!!
所以,劝你还是别写了吧……

其实那玩意就跟数组邻接表一样,几乎没什么用
顶多写出来跟同学显摆显摆:瞧,姐会写不用递归的快排$^_^$
我以前就曾经写过不用指针的数组邻接表,直接导致了我被大家pia飞~
而且如果你写那玩意写多了,就没人看的懂你的程序了,包括你自己……
(本人的数组邻接表就是例子!!!)
所以,有时间还不如去琢磨琢磨其它用处比较大的算法

另外快排这种东西我不太喜欢,代码不好写,时间复杂度未知,如果运气不好就O(n^2)了……
所以建议你改用堆排,虽然常数项大一点,但是最起码时间有保证啊!而且代码好写又好看,看着四十多行,其实翻来覆去就那几句话。写完之后如果缩进合适,远看起来特别艺术C+_+C
lvTommyJ
2011-08-05 · 超过25用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:83.1万
展开全部
和递归不递归有什么关系。你用冒泡不行?或者用二分插入法排序也可以
追问
我想知道就直接用快排解决排序问题,现在正纠结着
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c8fa4a6
2011-08-12 · TA获得超过252个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:143万
展开全部
自己构造一个栈,模拟递归的过程
#define push2(A,B) push(B);push(A);
void quicksort(a[],l,r)
{
int i;
stackinit();push2(l,r);
while(!stackempty())
{
l=pop();r=pop();
if(r<=l) continue;
i=partition(a,l,r)
if(i-1>r-i){push2(l,i-1);push2(i+1,r);}
else
{pushi2(i+1;r);push2(l,i-1);}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5660faf46
2011-08-12
知道答主
回答量:16
采纳率:0%
帮助的人:18.2万
展开全部
main()
{
float x,y,z;
scanf("%f%f%f",&x,&y,&z);
if(x>y&&x>z)
{
printf("%f\t",x);
if(y>z) printf("%f\t%f\n",y,z);
else printf("%f\t%f\n",z,y);
}
else if(y>x&&y>z)
{
printf("%f\t",y);
if(x>z) printf("%f\t%f\n",x,z);
else printf("%f\t%f\n",z,x);
}
else
{
printf("%f\t",z);
if(x>y) printf("%f\t%f\n",x,y);
else printf("%f\t%f\n",y,x);
}
}
这是我自己写的一个三个数从大到小排列的语句,运行结果正常,不知道对你有没有用处,我是初学的,给点意见哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wen1003
2011-08-13 · 超过11用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:29.2万
展开全部
双for循环,第一个for区别中位数层次,第二个区别中位数位置。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式