- ベストアンサー
構造体リストの年齢順ソート方法
- 構造体リストを年齢順にソートする方法について詳しく教えてください。
- 名簿の構造体リストをポインタをたどって辞書順にソートした後、年齢順にソートする方法について知りたいです。
- 名前が辞書順にソートされた構造体リストを年齢順にソートする方法について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ソートの方法は既に回答があるので、配列とリストについて。 データ構造として配列を選ぶか,リストを選ぶかは使い方とか目的等によります。 リストを選んだ方がいいケースは、例えばデータの追加、削除が頻繁に発生しデータ数が多い場合です。 具体的に言えば10万のデータがあって、先頭でデータの追加,削除が発生し、データが配列の場合は、99999のデータの移動が生じます。 リストの場合はリンクのつけかえだけですので、 データの移動は発生しません。 この質問の場合は現状ではどちらがいいかはわかりません。 ところで、この場合はクイックソートは向かない気がします。 というのはクイックソートでは比較の結果が同じ場合, 順番が保存されないからです。 例えば, ... 佐藤、10才 鈴木、10才 田中、10才 ... というデータがあった場合、年齢でソートして名前の順番が変わることがあります。
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
linked-listをそこそこのスピードでソートしたいなら、マージ・ソートがいいんじゃないかしら。
- shige_70
- ベストアンサー率17% (168/946)
なにもひとつの構造体でひとつのリスト構造しか作れないわけではないのですから、メンバにもうひとつポインタを追加して、年齢順リストを作ってあげる、という方法は如何でしょうか。
- winterofmeei
- ベストアンサー率22% (20/88)
MEIBOのポインタ配列をつくり、そこに各要素のポインタを格納して、年齢順に並べ替える方法はどうでしょうか?元々のリスト構造を壊すことなく、年齢順に要素を取得することができるようになります。 MEIBO *tmpList["要素数"]; // 要素数が可変なら動的に割り当てる // tmpListに各要素のポインタを格納 // qsortでも何でも使ってソートする // tmpListを参考に出力する
- Tsukasa0215
- ベストアンサー率22% (280/1257)
malloc関数でメモリを一時作業領域としてソートする方法もあります。 また何もメモリ上【だけ】で作業をする必要は無いですよ。方法としてはファイルに書き出すとか。