| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:快速排序的问题
取消只看楼主 加入收藏
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
结帖率:100%
收藏
已结贴  问题点数:35 回复次数:4 
快速排序的问题
这段代码在我机子上组建没有问题,可运行后的结果是什么也没有,不知道为什么,麻烦大家看看到底是哪里出问题了?
程序代码:
# include <stdio.h>

void QuickSort(int *, int, int);
int FindPos(int *, int, int);

int main(void)
{
    int i;
    int a[8] = {2, 5, 3, 65, 43, 53, 24, 8};

    QuickSort(a, 0, 7);

    for (i=0; i<8; i++)
        printf("%d ", a[i]);
    printf("\n");

    return 0;
}

void QuickSort(int * a, int low, int high)
{
    int pos;

    while (low < high)
    {
        pos = FindPos(a, low, high);
        QuickSort(a, low, pos-1);
        QuickSort(a, pos+1, high);
    }
}

int FindPos(int * a, int low, int high)
{
    int val = a[low];
   
    while (low < high)
    {
        while (low<high && a[low]<=val)
            low++;
        while (low<high && a[high]>=val)
            high--;
    }

    return low;
}
搜索更多相关主题的帖子: 快速 
2012-01-16 21:04
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
回复 2楼 beyondyf
但是我现在把while循环的那一段改成
    while (low < high)
    {
        while (low<high && a[low]<=val)
            low++;
        a[high] = a[low];

        while (low<high && a[high]>=val)
            high--;
        a[low] = a[high];
    }
怎么还是什么都不显示?


[ 本帖最后由 ai8343512 于 2012-1-16 21:18 编辑 ]

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2012-01-16 21:12
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
回复 4楼 有容就大
FindPos返回的是已经定型了的数据的下标,比如说4,3,5,1,2,7,6这7个数字,我通过FindPos函数就可让4放在第4号位,同时也传递了两个数据。
然后再用相同的原理将已经定型的数据左右两边数据各看成一组数据进行处理,这样就可以不断传递两个数据并不断确定第一个数的位置。
最后,所有的数都在相应的位置上了,也就完成了排序。

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2012-01-16 21:57
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
回复 6楼 beyondyf
我懂你的方法,很好理解很实用,但我还是想知道为什么我的程序就输出不了?

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2012-01-16 22:25
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:0 
错误有三点:
①找到了位置,没有交换数据
②在递归时本身就相当于一个循环,无需其它循环语句来控制它循环下去
③这种快速排序法必须从高位开始,不能从低位开始移动

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2012-01-17 08:59
快速回复:快速排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012816 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved