- ベストアンサー
構造体のメンバを基準にソートする方法
- 動的に割り当てた構造体のメンバを基準に降順や昇順にソートする方法を教えてください。
- たとえば、商品価格を基準に並び替える機能を追加したい場合、どのように解決すれば良いでしょうか?
- 構造体のメンバを利用して、ソート機能を追加する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
クイックソートもどきのコーディングをしてみました。 考え方としては、データをある基準より前に来るものと後に来るものに 分けた上で、それぞれについて再帰的に同様の処理をします。 コンパイルも実行もしていませんので、「自信なし」としておきます。 なお、昇順のみです。降順への拡張はご自身で考えてみて下さい。 void sort(struct shohin_type **first, struct shohin_type **last) { struct shohin_type *datum = *first; struct shohin_type *candidate; struct shohin_type *next; if (datum) { candidate = datum->next; while (candidate && (cadidate != *last)) { next = candidate->next; if (datum->price > cadidate->price) { if (candidate->before) { candidate->before->next = candidate->next; } if (candidate->next) { candidate->next->before = candidate->before; } if (datum->before) { datum->before->next = candidate; } candidate->before = datum->before; datum->before = candidate; candidate->next = datum; } } sort(first, &datum->before); sort(&daum->next, last); } }
その他の回答 (1)
- ranx
- ベストアンサー率24% (357/1463)
やっぱり「自信なし」で正解だったな。 ループの最後に抜けがありました。 candidate = candidate->next;
お礼
ranxさん、ご回答どうもありがとうございました。お礼が遅くなり大変申し訳ございません。これは商品管理プログラムで、商品の登録、更新、削除、検索、ソート、復旧(削除したものをもどす。)等の機能があり、登録したものをソートするのにどうすればよいのか悩んでおりました。ややこしいですが、なんとなくわかったようなわからないようなあやふやな感じなので、教えていただいた、ソースを参考に昇順にソートする関数を作ってみました。これを元に降順関数を作成してみます。ご指導ありがとうございました。またよろしくお願いいたします。