我正在用 C 编写一个桶排序程序。在将小桶合并到一个大桶中之后,我需要删除填充小桶的 -1。
我对 C 很陌生,所以我可能忽略了一个非常简单的解决方案。
这是我的解决方案,它似乎返回一个带有 1 个尾随垃圾值和尾随 0 的数组,该数组填充数组,直到它达到未修剪存储桶的大小(其中所需的结果是一个没有 -1、垃圾值和尾随 0 的存储桶)。
// A function to trim a bucket of a given size to a bucket containing no -1s
int* trimBucket(int* bucket, int size)
{
int n = 0, i = 0;
int* newBucket;
// This loop is to count the number of elements between 0 and 9999
for(n = 0; n < size; n++)
{
if(bucket[n] != -1 && bucket[n] < 10000)
i++;
}
// Create a new bucket equal to the number of elements counted
// Filled with -2 to differentiate from -1s contained in the bucket array
newBucket = allocateAndInitiateOneD(i, -2);
i = 0;
for(n = 0; n < size; n++)
{
// I only want values between 0-9999 to be put into the new array
if(bucket[n] != -1 && bucket[n] < 10000)
{
newBucket[i] = bucket[n];
i++;
}
}
free(bucket); // Am I doing this right?
return newBucket;
}
allocateAndInitiateOneD 函数:
// A function to allocate memory for a one dimensional array and fill it with the given value
int* allocateAndInitiateOneD(int x, int initialNum)
{
int runs = 0;
int* oneArray;
oneArray = malloc(sizeof(int) * x);
for(runs = 0; runs < x; runs++)
oneArray[runs] = initialNum;
return oneArray;
}
有人可以帮助我了解我做错了什么以及如何获得预期的结果吗?
谢谢您的帮助!
编辑:我正在 Unix 系统上编译和运行。可能不相关,但这是一个使用 MPI 库的多处理程序(这似乎不是问题所在)。