私はC++の本を使っていますが、私は挑戦の質問の1つにちょっと残っています。私はポインタについて学んでいます。この特定の問題では、学生の名前の文字列とスコアの倍数で構造体の配列(ポインタを使用)をソートする必要があります。並べ替えの後、構造のデータメンバーはまだ明らかに一致する必要があります(つまり、正しい名前は依然としてスコアと一致する必要があります)。C++の選択構造の配列を並べ替える
これは私の問題がある場所です。これまでのところ、昇順でスコアを並べ替えるようにしていますが、その名前はすべて混乱します。なぜ私はまだ完全にポインタを理解するために働いていると、それらを使用する方法を把握することができませんでした。私はバブルの並べ替えを正しく行うことができますが、選択したソートではなく、スコアで名前を保持します。どんな助けでも大歓迎です。ここで
は、私が持っている機能は、選択ソートのためにある:
void selection_sort(Student *ptr, int size) // selection sort - having some problems
{
int start,
min_index,
min_value;
for (start = 0; start < (size - 1); start++) {
min_index = start;
min_value = (ptr+start)->score;
for (int index = start+1; index < size; index++) {
if ((ptr+index)->score < min_value) {
min_value = (ptr+index)->score;
min_index = index;
}
}
// the following line is where, i think, the problem is, but i haven't
// been able to figure out the solution, despite trying numerous approaches
*(ptr+min_index) = *(ptr+start);
(ptr+start)->score = min_value;
}
}
だから、私が持っているものです。私はまだアルゴリズムを分類するのには大したことではないし、これは私には全く新しいものなので、恐ろしいことではないと思う。もしこれらの分野に精通している人が私を正しい方向に向けることができたら、それはすばらしいでしょう。この行は、データを上書きするようだが、彼らがあるべきとしてそれらを交換しないで
*(ptr+min_index) = *(ptr+start);
:
C++では、関数の引数としてポインタとサイズを渡しません。代わりに、標準コンテナ(ベクトルなど)を使用し、開始イテレータと終了イテレータを渡します。 –