读书人

计数排序传数组求教,该如何处理

发布时间: 2012-02-10 21:27:42 作者: rapoo

计数排序传数组求教
新手查了N久的错误 硬没查出来..
结果最后发现把a,b,c三个数组声明为全局变量就可以解决问题..请问原来的代码有什么问题?
#include<iostream>
using namespace std;
void Counting_sort(int a[],int b[],int number,int k);
//int a[200],b[200],c[200];
void main()
{
cout << "number of numbers" << endl;
int number;
cin >> number;
int a[200];
int k = 0;
for(int i = 1; i <= number; i++)
{
cin >> a[i];
if (k < a[i])
k= a[i];
}
int b[200];
Counting_sort(a,b,number,k);
for(i = 1; i <= number; i++)
{
cout << b[i] + 1 << " ";
}
}
void Counting_sort(int a[],int b[],int number,int k)
{
int c[200];
for(int i = 0; i <= k; i++)
{
c[i] = 0;
}
for(i = 0; i <= number; i++)
{
c[a[i]]++;
}
for(i = 1; i <= k; i++)
{
c[i] = c[i] + c[i - 1];
}
for(i = number; i >= 1; i--)
{
b[c[a[i]]] = a[i];
c[a[i]]--;
}
}







[解决办法]
static int a[200],b[200],c[200];
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。

读书人网 >C++

热点推荐