下面的代码用于数组的bucketsorting。它适用于10k数据集。但不知何故,它停止工作50k或100k整数。 (注意:文件中有50001个整数)
有了一些printf函数,我发现代码无法在创建int [N] [10]时进一步发展。它停在这里。它不能得到N号。
void bucket_inserting(int b [],int N,int max){
int a [N] [10]
希望很清楚。能从你们那里得到一些帮助会很高兴。
int largestNumber(int array[],int n)
{
int maximum, c;
maximum = array[0];
for (c = 1; c < n; c++)
{
if (array[c] > maximum)
{
maximum = array[c];
}
}
return maximum;
}
void bucket_inserting(int b[],int N, int max){
int a[N][10];
int size,c,k,i,j,temp,range=max/10;
int count[10]= {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for(i=0;i<N;i++){
temp=b[i];
for(j=0;j<10;j++){
if(temp>=j*(range) && (temp-1)<(j+1)*(range)){
a[count[j]][j]=temp;
count[j]=count[j]+1;
}
}
}
/*sort each bucket*/
for(j=0;j<10;j++){
size=count[j];
for (i = 1; i < size; i++)
{
int tmp = a[i][j];
for (c=i; c>0 && tmp < a[c-1][j]; c--)
a[c][j] = a[c-1][j];
a[c][j] = tmp;
}
}
/*Printing*/
for(j=0;j<10;j++){
size=count[j];
for(i=0;i<size;i++)
printf("%d \n",a[i][j]);
}
}
int main(){
/*read file*/
FILE *file = fopen("t_50000.txt", "r");
int lol[50001];
int i=0, num, max,range;
while(fscanf(file, "%d", &num) == 1) {
lol[i] = num;
i++;
}
fclose(file);
/*find max*/
max= largestNumber(lol,50001);
bucket_inserting(lol,50001,max);
}