• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:単方向リストの昇順ソートについて)

単方向リストの昇順ソートについて

このQ&Aのポイント
  • 単方向リストの昇順ソートについて質問文を解説します。
  • 単方向リストに値を入れるまでの手順を解説しました。
  • ソートの手順について詳しく解説します。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

 論理的に考えていこう。プログラムを組む時に、その関数はどんなタスクを実行して、その行までにどんなタスクが完了していなければならないのか。 public void sort(){ if(this.next == null) { // 自分が1番下ならソート完了 return; } this.next.sort(); // 配下のソートが終わるまで待つ(ここで自分の1個下が配下中最も小さな値になる) if(this.value > this.next.value){ // 自分の方がおっきければ int tmp = this.value; // 自分と自分の1個下をスワップする(ここで自分の1個下に配下中に配置されるべき値がはいる) this.value = this.next.value; this.next.value = tmp; this.next.sort(); // もう一度配下をソートし直す必要がある } }  後で試してみれば分かるが、実はこのアルゴリズムはバブルソートよりも効率が悪い。改良は頑張ってくれ。  余談だが、せっかくポインタ数珠繋ぎのリストにしたんだから交換法じゃなくて挿入法の方が良いと思う。それと、値の交換よりもアドレスの交換の方が応用が利くよ。

yukikundesuyo
質問者

お礼

返答遅れてゴメンナサイ。 再帰処理が2行があり、多少処理を追うのに苦労しましたが何とか理解できました。ありがとうございます。

その他の回答 (1)

回答No.1

こんばんは。 よくわかりませんが、単純にNULLになるまで回せばいいような・・・? 回数は可変ですから・・・。 (^^ゞ

yukikundesuyo
質問者

補足

具体的にソースで記述するとどのようになりますか?