• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:主キーソート(キーの優先順位をつけてソート))

主キーソート(キーの優先順位をつけてソート)

このQ&Aのポイント
  • 主キーソート(キーの優先順位をつけてソート)について解説します。
  • 特定のキーを基準にして昇順にデータをソートする方法について説明します。
  • 複数のキーがある場合、優先順位をつけてデータをソートする方法について詳しく解説します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>キーの優先順位をb>a>cにするにはどうしたらよいでしょうか。 int tmp1 = test1.b; /* b を基準とする */ int tmp2 = test2.b; return tmp1 - tmp2; を int tmp1 = test1.b; /* b を基準とする */ int tmp2 = test2.b; if (tmp1 != tmp1) return tmp1 - tmp2; /* bが不一致なら、その結果を返す */ tmp1 = test1.a; /* bが等しい場合のみ、次に a を基準とする */ tmp2 = test2.a; if (tmp1 != tmp1) return tmp1 - tmp2; /* aが不一致なら、その結果を返す */ tmp1 = test1.c; /* bもaも等しい場合のみ、次に c を基準とする */ tmp2 = test2.c; return tmp1 - tmp2; に変えれば良いです。 d、e、f…と増やしたければ、同じように「優先するキーが不一致なら不一致と返し、一致した場合は次に優先するキーを比較」というのを、優先順位に合わせて繰り返しましょう。

noname#237746
質問者

お礼

なるほどです。なんかもやもやが取れてすっきりです。ありがとうございました。

その他の回答 (2)

回答No.2

> これはb列を基準にしたソートであり、a列とc列の優先順位は書かれていません 確かにb列を基準にしたソートになっていますが、この例ではb列だけでソートできてしまうので、a列とc列の優先順位は無関係です。b列以外の優先順位が問題になるのはb列が同じ値である場合です。 このことを踏まえれば、 > キーの優先順位をb>a>cにするにはどうしたらよいでしょうか。 比較関数でb列が一致したとき、つまりtmp1 - tmp2の値が0のとき、a列の値を比べ、それが一致しているときにc列の値を比べればよいことがわかるはずです。 キーがたくさんある場合、優先度の高いものから比較して、大小の判定がつけば、判定結果を返し、大小判定がつかないとき(値が一致しているとき)に次の優先度について判定を行う。キーの大小判定がつくまでこの操作を繰り返せばいいです。

noname#237746
質問者

お礼

そういうことだったですね、納得です。ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そ~いう比較関数を作ってください. あ, ちなみにだけど, このプログラムで「クイックソート」するかどうかは分からんよ.

関連するQ&A

専門家に質問してみよう