[1597] Re:自己参照構造体のソートの方法がわかりません
投稿者:(ぱ)こと管理人
2010/07/01 01:53:45
>線形リストをつくったのですが、リストに値をセットした後連結リストをソートしたい
>のですが、わかりません。どなたか教えてください。
だったらマージソート…と思ったのですが774RRさんに先に書かれてしまったので、
本題からずれますが、
> DATA *top = malloc(sizeof(DATA));
最初にいきなりダミーのノードを作っていて、そのために以後、
ループをまわすとき、p->nextを終了判定に使うことになっています。
add()関数が微妙に楽になる以外、ここにダミーノードを置くことは
あまりメリットがないんじゃないかなあ、と私は昔から思っているのですが
(センス・オブ・プログラミングに書いたりもしましたが)どうなんでしょうねえ。
あとまあ、ものすごく細かいことですが、
>int SUM(DATA *data)
>{
> return data->language+data->language;
>}
ここはdata->math + data->languageですよね。
また、連結リストのソートは、効率を気にしないのなら単純選択ソートとかでも
できるんじゃないでしょうか。
・連結リストを頭からスキャンして、最大値のノードを探す。
・最大値のノードをリストから引っぺがし、ソート済みリストの先頭につなぐ。
・上記操作を繰り返す。