0
私はCで、「一般的な」マージをコーディングしようとしています:、Cでの一般的なマージを書くvoidに値を割り当てることはできません*
void mergeSort(void *arr, int begin, int end,int size,
int (*comp)(void *, void *));
しかし、あなたがホルダー/一時配列を必要があるので、それはなり少しトリッキー。
int mid = (begin + end)/2;
int len = end - begin + 1;
void *pom = malloc(len*size);
しかし、私はその配列に値を割り当てることはできません、それを回避する方法があります: 私は無効として、それを作成したので、*配列、その配列に値を代入する方法がわからないのですか?
i = begin, j = mid + 1, k = 0;
while (i <= mid && j <= end)
**pom[k++]** = ((*comp)((char*)arr + i*size, (char *)arr + j*size) <= 0) ? arr[i] : arr[j];
while (i <= mid)
**pom[k++]** = arr[i++];
while (j <= end)
**pom[k++]** = arr[j++];
太い行がエラーを出します。
'** pom [k ++] **'は確かに正しいC文法ではありません。 – Olaf
おそらく、 'memcpy()'を使いたいでしょう。これは、任意の型のオブジェクトに/からコピーすることができます。 – EOF
ヒント:文字列ポインタの配列をソートすることから始めます。ステップ2:voidポインターの配列に変更します。ステップ3)非文字列(例:structs)を指し示すvoidポインタに変更します。ステップ4)構造体などの任意のオブジェクトの配列に変更します。 – wildplasser