C の qsort 関数と同じ方法で、独自の Mergesort 関数を作成しようとしています。既知の項目の配列に対して MergeSort を書いていれば問題はありませんが、それらがどうなるかわからないため、ループに陥ります。
私の教授から与えられた仕様では、マージに別の関数を使用することは望まれていませんでした。そのため、Mergesort 関数自体の内部にその実装を記述しています。つまり、qsort() と同じ情報が得られるということです。
void* base
- 並べ替える配列の最初の要素へのポインタsize_t nel
- 配列の要素数size_t width
- 各要素のサイズint (*compar)( const void*, const void* )
- 各要素を比較する方法を示す関数
私が抱えている問題は、マージ部分にあります。私が見たすべての実装では、一時的な配列を使用して、並べ替え中のアイテムを格納していました。私は void ポインターの操作に慣れていません。私が見つけた最大の障害は、移動して配列に値を代入することです。が指す配列の 2 番目のインデックスの値を見つけるにはどうすればよいbase
ですか? その配列の値を一時配列に割り当てるにはどうすればよいですか? その一時的な配列を作成するにはどうすればよいですか?
void ポインターを char にキャストし、それらを幅だけインクリメントすると機能しますか? ただし、割り当てがどのように機能するかはわかりません。