鱼C论坛

 找回密码
 立即注册
查看: 3610|回复: 14

这是我用C语言做的一个计数排序的程序,可以麻烦哪位高手帮我看看实现不了的原因吗?

[复制链接]
发表于 2012-4-15 22:16:12 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 心空草 于 2012-4-16 19:05 编辑


#include <stdio.h>
#include <math.h>
#include <malloc.h>
#define length 6
//#define max 5
int MAX(int A[]);
void COUNTING_SORT(int A[],int B[],int k);
void main()
{
        int a[length],b[length],i,max;
        printf("请输入%d个数据:\n",length);
        for(i=0;i<length;i++)
                scanf("%d",&a);
        printf("排序前的顺序:");       
        for(i=0;i<length;i++)
                printf("%5d",a);
        max=MAX(a);
        printf("\n");
        COUNTING_SORT(a,b,max);
        printf("排序后的顺序:");
        for(i=1;i<=length;i++)
                printf("%5d",b);
        printf("\n");
}



int MAX(int A[])
{
        int max,i,temp;
        max=A[0];
        for(i=1;i<length;i++)
                if(max<A)
                {
                        temp=max;
                        max=A;
                        A=temp;
                }
        return max;
}


void COUNTING_SORT(int A[],int B[],int k)
{
        int i,*C,j;
        C=(int *)malloc(k*sizeof(int));
        for(i=0;i<=k;i++)
                C=0;
        for(i=0;i<length;i++)
                C[A]=C[A]+1;
        for(i=1;i<=k;i++)
                C=C+C[i-1];
        for(j=length-1;j<=0;j--)               
        {
                B[C[A[j]]]=A[j];
                C[A[j]]=C[A[j]]-1;
        }
        return;
}

最佳答案

查看完整内容

心空草 发表于 2012-4-16 18:12 不好意思。这串代码是我从的VC直接复制过来的,复制完后没怎么去检查,有一些细节在这里没有显示出来,很 ... #include //#include //#include #define length 6 int MAX(int A[]); void COUNTING_SORT(int A[],int B[],int k); //A[]为未排序的数组,B[]为排好序的数组,k为数组长 void main() { int a[length],b[length],i,max; printf("请输入%d个数据:\ ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-4-15 22:16:13 | 显示全部楼层
本帖最后由 hxs554f 于 2012-4-16 22:35 编辑

心空草 发表于 2012-4-16 18:12
不好意思。这串代码是我从的VC直接复制过来的,复制完后没怎么去检查,有一些细节在这里没有显示出来,很 ...
#include <stdio.h>
//#include <math.h>
//#include <malloc.h>
#define length 6

int MAX(int A[]);
void COUNTING_SORT(int A[],int B[],int k);  //A[]为未排序的数组,B[]为排好序的数组,k为数组长

void main()
{
        int a[length],b[length],i,max;

        printf("请输入%d个数据:\n",length);
        for(i=0;i<length;i++)
                scanf("%d",&a);          //scanf("%d",&a);

        printf("排序前的顺序:");        
        for(i=0;i<length;i++)
                printf("%5d",a);       //printf("%5d",a);
        
        max=MAX(a);
        printf("\n");

        //COUNTING_SORT(a,b,max);
        
        COUNTING_SORT(a,b,length);  
        
        printf("排序后的顺序:");
        for(i=1;i<=length;i++)
                printf("%5d",b[i-1]);  //printf("%5d",b);
        
        printf("\n");
}



int MAX(int A[])   //其实这个求最大数好像没用,但帮你修改一下
{
        int max,i;
        max=A[0];
        for(i=1;i<length;i++)
                if(max<A[i-1])           //if(max<A)
                {
                         max=A[i-1];         //temp=max;  //如果仅是求最大数的话,则不必要交换位置
                                             //max=A[i-1];
                                             //A[i-1]=temp;
                }
    return max;
}


void COUNTING_SORT(int A[],int B[],int k)   //不知你使用何种排序方法,我这是用冒泡算法
{
           int i,tim,tem;
           for(tim=1;tim<k;tim++)       //tim为循环次数    排序
           {
                   for(i=0;i<k-1;i++)
                   {
                           if(A>A[i+1])
                           {
                                   tem=A;
                                   A=A[i+1];
                                   A[i+1]=tem;
                           }
                   }
           }

           for (i=0;i<k;i++)
           {
                   B=A;
           }
}//多练习一下就不会再犯这些错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 16:03:38 | 显示全部楼层
printf("%5d",a[i]);  //printf("%5d",a);此类错误还有很多处
麻烦你解释一下这两个函数是要干嘛的,我怎么看不明白
int MAX(int A[]);   
void COUNTING_SORT(int A[],int B[],int k);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 16:32:47 | 显示全部楼层
for(i=0;i<length;i++)
                 scanf("%d",&a);

由于前面定义了a[length],那么a就已经表示是数组a[length]的首地址,所以用应该直接用a,而不是&a...当然估计你的想法是输入length个数字分别给数组里面的变量,那么这样很明显有问题,应该是scanf("%d",&a[i]);当然后面同样有类似错误...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-16 18:12:35 | 显示全部楼层
本帖最后由 心空草 于 2012-4-16 18:24 编辑

不好意思。这串代码是我从的VC直接复制过来的,复制完后没怎么去检查,有一些细节在这里没有显示出来,很抱歉。菜鸟一个,还望多多指教。
int MAX(int A[]);   是一个求数组A元素中最大值的函数
void COUNTING_SORT(int A[],int B[],int k);  就是一个计数排序函数的定义,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-16 18:16:35 | 显示全部楼层

不好意思。这串代码是我从的VC直接复制过来的,复制完后没怎么去检查,有一些细节在这里没有显示出来,很抱歉。现在已经改好了,我也调试了好几次,不过一到关键时刻就出现一串自己不认识的代码,汇编我才刚刚学。菜鸟一个,还望多多指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-16 19:08:48 | 显示全部楼层
hxs554f 发表于 2012-4-16 16:03
printf("%5d",a);  //printf("%5d",a);此类错误还有很多处
麻烦你解释一下这两个函数是要干嘛的,我怎么看 ...

哎!!改了半天发现改不了......:@
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-16 19:09:54 | 显示全部楼层
心空草 发表于 2012-4-16 18:16
不好意思。这串代码是我从的VC直接复制过来的,复制完后没怎么去检查,有一些细节在这里没有显示出来,很 ...

改了半天发现改不了......哎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 20:16:29 | 显示全部楼层
149582523欢迎加群交流,c/c++交流群,比较容易及时解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 21:25:57 | 显示全部楼层
#include <stdio.h>
#define length 6
//定义函数
void scanf(int []);          //输入函数        
void print(int []);          //输出函数  
void swap(int *,int *);      //交换函数
void sort(int []);           //从大到小排序
void main()
{
        int A[6];
        scanf(A);
        print(A);
        sort(A);
        print(A);
}
void scanf(int A[])
{
        int i;
        printf("请输入6个数:\n");
        for(i=0;i<length;i++)
        {
                scanf("%d",A+i);
        }
}
void print(int A[])
{
        int i;
        printf("输出为:");
        for(i=0;i<length;i++)
        {
                printf("%d   ",*(A+i));
        }
        printf("\n");
}
void swap(int * a,int * b)
{
        int temp;
        temp = *a;
        *a = *b;
        *b = temp;
}
void sort(int A[])
{
        int i,j;
        for(j=0;j<length;j++)               
        {
                for(i=0;i<j;i++)
                {
                        if(*(A+j) > *(A+i))
                                swap((A+j),(A+i));
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 21:27:17 | 显示全部楼层
你写的太乱,好多的东西写得格式不对,譬如:数组的应用,自己好好看看书吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-16 22:36:51 | 显示全部楼层
这什么情况:
编辑模式是这样:
360截图-3226203.jpg

发帖后变成这样:
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-17 13:17:09 | 显示全部楼层
龙少~乌托邦 发表于 2012-4-16 21:27
你写的太乱,好多的东西写得格式不对,譬如:数组的应用,自己好好看看书吧

谢谢 你的解答,从你的编程中我一个明显的坏习惯就是没有写注释,我的源程序是要求计数排序的。数组方面的问题我已经注意到了,只是复制到论坛上,有些东西是显现不出来的。
我看了你的代码,是冒泡排序,而且是在C++环境实现的。计数排序是那个时间复杂度为n的一个算法。呵呵 不管怎样还是谢谢你的指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-4-17 13:19:35 | 显示全部楼层
hxs554f 发表于 2012-4-16 22:36
这什么情况:
编辑模式是这样:

不好意思,没有做注释,我的源程序是要求计数排序的,就是那个时间复杂度为n的算法,不过还是谢谢你的指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-4-21 10:09:55 | 显示全部楼层
心空草 发表于 2012-4-17 13:17
谢谢 你的解答,从你的编程中我一个明显的坏习惯就是没有写注释,我的源程序是要求计数排序的。数组方面的 ...

嗯,没太看懂你啥意思,所以就自己写了一个。希望对你有用吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 04:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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