| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 602 人关注过本帖
标题:一道超级简单的排序题目
只看楼主 加入收藏
傥来
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2014-5-4
结帖率:0
收藏
已结贴  问题点数:10 回复次数:6 
一道超级简单的排序题目
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define YES 1
#define NO 0
void SWAP(int x,int y) {int t;t=x;x=y;y=t;}
void ORDER2(int x,int y) {if(x>y) SWAP(x,y);}
void ORDER3(int x,int y,int z) {ORDER2(x,y),ORDER2(x,z),ORDER2(y,z);}
    void quicksort(int *left,int *right);
    int pivot(int *left,int *right,int *pivot_pos);
    int *partition(int *left,int *right,int pivot);
int main()
{

    int i,a[1000],N;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }
    quicksort(a,a+N-1);
    for(i=0;i<N;i++)
        printf("%d\t",a[i]);
    return 0;
}

void quicksor(int *left,int *right)
{
    int *p,pivot_p;
    if(pivot(left,right,&pivot_p))
    {
        p=partition(left,right,pivot_p);
        quicksort(left,p-1);
        quicksort(p,right);
    }
}
int pivot(int *left,int *right,int *pivot_pos)
{
    int a,b,c,*p;
    a=*left;
    b=*(left+(right-left)/2);
    c=*right;
    ORDER3(a,b,c);
    if(a<b)
    {
        *pivot_pos=b;
        return YES;
    }
    else if(b<c)
    {
        *pivot_pos=c;
        return YES;
    }
    else
        for(p=left+1;p<=right;p++)
            if(*p!=*left)
            {
                *pivot_pos=(*p<*left)?*left:*p;
                return YES;
            }
            return NO;
}
int *partition(int *left,int *right,int pivot)
{
    while(left<=right)
    {
        while(*left<pivot)
            left++;
        while(*right>=pivot)
            right--;
        if(left<right)
        {
            SWAP(*left,*right);
            left++;
            right--;
        }
    }
    return left;
}



运行一下,一个错误,是:
Linking...
试一试.obj : error LNK2001: unresolved external symbol "void __cdecl quicksort(int *,int *)" (?quicksort@@YAXPAH0@Z)
Debug/试一试.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

完全不知道为什么错了。
搜索更多相关主题的帖子: color 
2014-06-03 01:09
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:2 
程序代码:
    ......
void ORDER2(int x,int y) {if(x>y) SWAP(x,y);}
void ORDER3(int x,int y,int z) {ORDER2(x,y),ORDER2(x,z),ORDER2(y,z);}
    void quicksort(int *left,int *right);                //函数名字
    int pivot(int *left,int *right,int *pivot_pos);
    int *partition(int *left,int *right,int pivot);

    ......

    quicksort(a,a+N-1);
    for(i=0;i<N;i++)
        printf("%d\t",a[i]);
    return 0;
}

void quicksor(int *left,int *right)          //看看这个函数的名字
{
    int *p,pivot_p;
    if(pivot(left,right,&pivot_p))
    {
        p=partition(left,right,pivot_p);
        quicksort(left,p-1);                  //注意这里调用的函数的名字
        quicksort(p,right);
    }
}
    ......


没有仔细看代码, 不明白你的排序到底是什么排序,想达到什么样的目的.  只看出那一个地方不正确.

测试输入n=10, 然后在顺序输入10个整数的情况下,可以得到顺序输出;任意输入的情况下, 不保证输出, 程序没法按照自己的想法去运行.

另外, 程序没有任何的输入输出提示, 和用户没有交互, 这点不好.

代码测试环境:  WinXP+C-Free5.0.
2014-06-03 07:14
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
void SWAP(int x,int y)
void ORDER2(int x,int y)
void ORDER3(int x,int y,int z)
    void quicksort(int *left,int *right);
    int pivot(int *left,int *right,int *pivot_pos);
    int *partition(int *left,int *right,int pivot);

貌似这几个函数还有问题, 至少是没法按照你的既定想法运行.

代码测试环境:  WinXP+C-Free5.0.
2014-06-03 07:25
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:2 
估计是你的递归没有降阶。能不能说说你排序的思路?
2014-06-03 07:51
张宝顺
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2014-5-30
收藏
得分:2 
第一眼看到一个问题,修改后编译、运行均ok,但最终的运行结果貌似和你设想的不同。

quicksort的函数定义中你把它的名字写错了....
void quicksort(int *left,int *right)那里,少了个“t”

至于结果不对的事,得细看看
2014-06-03 14:49
qidian123
Rank: 2
等 级:论坛游民
帖 子:19
专家分:34
注 册:2012-4-18
收藏
得分:2 
很简单也看不太懂哦,求解答哦

www.jiajunyuanlin.com  www.futegz.comjtiao.com
2014-06-04 20:03
whlie
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2014-6-4
收藏
得分:2 
2014-06-05 00:10
快速回复:一道超级简单的排序题目
数据加载中...
 
   



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

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