鱼C论坛

 找回密码
 立即注册
查看: 3685|回复: 4

快速排序

[复制链接]
发表于 2013-5-25 21:34:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void quick_sort(int s[], int l, int r)
{

    if (l < r)
    {
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x)

                j--;
            if(i < j)
                s[i++] = s[j];


            while(i < j && s[i] < x)

                i++;
            if(i < j)
                s[j--] = s[i];

        }

        s[i] = x;
        quick_sort(s, l, i - 1);   //l和r一直都没变过,我一直用0和9取代l和r怎么就出错了

        quick_sort(s, i + 1, r);
    }
}

void main()
{
    int s[]={48,6,57,42,60,72,83,73,88,85};
    quick_sort(s,0,9);
    for (int i=0;i<10;i++)
    {
        printf("%d  ",s[i]);
    }
}
这是找到的代码,别的还好理解,就是在递归时,我用0和9取代l和r怎么会出错。我没看到l和r变过呀

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-25 23:05:07 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-26 00:03:51 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-26 12:45:48 | 显示全部楼层
      最近在学习C++,也不是很懂,就这个程序,谈谈自己的想法,大家一起学习。
      void quick_sort(int s[],int l,int r)这个程序实现的是S[l]到S[r]之间的数值排序,具体是将S[i]在s[i]到s[r]排序中的位置找出,并将S[I]的值赋予该位置,小于S[I]的值放于该位置左边,大于S[I]的值放于改位置右边。通过多次调用程序,最终将S[i]到S[r]的值从小到大排序。但是程序里面两个数组成员互换是有问题的 ,如s[i++] = s[j];s[i++]的值未另外保存就被覆盖了。还有对数组成员的使用也是有问题的,如while(i<j&&s<x),应该是while(i<j&&s[i]<x),后面还有几个地方使用到数组成员的也是需要修改过来的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-26 13:27:36 | 显示全部楼层
真是难得给力的帖子啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-27 21:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表