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 ライブラリを使用したマルチプロセス プログラムです (これは問題の場所ではないようです)。