首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小疑点很纠结

2012-05-31 
小问题很纠结啊#include stdio.h#include stdafx.hvoid COUNT_SORT(int a[],int b[],int k)//k为输入

小问题很纠结啊
#include "stdio.h"
#include "stdafx.h"
void COUNT_SORT(int a[],int b[],int k)//k为输入数据中最大的数值,也是辅助数组的大小
{
int i,c[100],n;
//............辅助数组的初始化.................
for (i=0;i<=k;i++)
c[i] = 0;
for (i=0;i<n;i++)//n为待排数组的长度
c[a[i]] = c[a[i]]+1;//c[i]为值为i的元素个数
for (i=1;i<=k;i++)
c[i] = c[i]+c[i-1];//c[i]为值小于等于i的元素个数,也代表元素在数组中的位置
for (i=0;i<n;i++)
{
b[c[a[i]]] = a[i];
c[a[i]] = c[a[i]]-1;
}
}
void main()
{
int i,n,k,a[100],b[100];
printf("Please input the size of a[] and the largest number of a[]:\n");
scanf("%d"&n);
scanf("%d"&k);
COUNT_SORT(a,b,k);
printf("the array after sort:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
}
这是计数排序的程序代码,但是程序总是报错error C2296: '&' : illegal, left operand has type 'char [3]',实在没有办法了,希望高手相助......

[解决办法]
终于看懂了。。老子看了很有好久。。。不得分,你就对不起我了。。
你知道你那你错了吗?还有一种改法。这程序只对大于等于0的整数才有用;如果你输入的数小于0了;那么程序失败;
c[a[i]] = c[a[i]]+1; 
//c[i]为值为i的元素个数.[color=#FF0000][/color] 按照你的程序分析要是c[j]中的j!=a[i]. (这里a[i]是你输入的)则c[j]=0;
 for (i=1;i<=k;i++)
 c[i] = c[i]+c[i-1]; //但是你这句运行后.作用的是就k>=j>0当所有的j>0;c[j]!=0;如果存在j=a[i]=0;暂时不要管j=0;在后面我为你解释。
 for (i=0;i<n;i++)
 {
 b[c[a[i]]] = a[i];
//[color=#FF0000][/color] 可以这样该 b[c[a[i]]-1]=a[i];这也是你出错的原因.因为i<n;0<a[i]<=k;刚才上一句说了,只要k>=j>0;必然c[j]!=0;那么b[0]则没有初始化;按照你写的最后数出来就是int型最小值。(如果你输入的数有a[i]=0;j=a[i];则j=0,也就是c[0]存在(c[0]现在表示你输入0的个数)。而且c[0]>=1;那么还是b[0]没初始化。)
 b[c[a[i]]] = a[i];
 c[a[i]] = c[a[i]]-1;
 }
最后输出的时候你是
for(i=0;i<n;i++)
 printf("%4d",b[i]);//在前面都分析了b[0]没初始化了;所以从b[0];开始就错了。
两种方法。。。。。加分哈。我都做了一下午了。有点不好解释的。希望你能看懂。自己多理解。

热点排行