开发者社区> 问答> 正文

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

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

展开
收起
知与谁同 2018-07-17 09:23:59 2749 0
6 条回答
写回答
取消 提交回答
  • 这个时候,玄酱是不是应该说点什么...
    写程序的目的就是花最少的代价实现要求。 能用简单的尽量用简单的。
    2019-07-17 22:55:13
    赞同 展开评论 打赏
  • 貌似意义不大
    2019-07-17 22:55:13
    赞同 展开评论 打赏
  • TA有点害羞,没有介绍自己...
    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);
    }
    }
    这是我自己写的一个三个数从大到小排列的语句,运行结果正常,不知道对你有没有用处,我是初学的,给点意见哦。
    2019-07-17 22:55:13
    赞同 展开评论 打赏
  • 阿里云开发者社区运营负责人。原云栖社区负责人。
    双for循环,第一个for区别中位数层次,第二个区别中位数位置。
    2019-07-17 22:55:13
    赞同 展开评论 打赏
  • 可以用循环代替啊。所有的递归都是可以用循环加堆栈一类的东西代替的。
    但是那会比较恶心,恶心到连本人这么勤奋的好学生都不愿意写……
    如果你竟然真的写了一遍,保证你写完之后这辈子不会再想写第二遍。。。
    所以,劝你还是别写了吧……

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

    另外快排这种东西我不太喜欢,代码不好写,时间复杂度未知,如果运气不好就O(n^2)了……
    所以建议你改用堆排,虽然常数项大一点,但是最起码时间有保证啊。而且代码好写又好看,看着四十多行,其实翻来覆去就那几句话。写完之后如果缩进合适,远看起来特别艺术C+_+C
    2019-07-17 22:55:13
    赞同 展开评论 打赏
  • Nothing for nothing.
    自己构造一个栈,模拟递归的过程
    #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);}
    }
    }
    2019-07-17 22:55:13
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载