- ベストアンサー
ソート Comparator
Integer型の変数num(10,4,8,6,9,5)をそれぞれ含むオブジェクト配列aryがあり、それをソートするため Arrays.sort(arry,sortLogic); とした場合、 Comparatorインターフェースを実装したクラスsortLogic内のメソッドで public int compare(Object object1, Object object2) { return ((ary)object1).compareTo(((ary)object2).num); } とすると、昇順にソート(修正ソートマージ)、また、 return ((ary)object1).compareTo(((ary)object2).num); とすると降順にソートされるみたいなのですが、どのような手順(アルゴリズム)でソートされるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 訊きたいのは、例えば、 > 「まず10と4が比較されて10が大きいので1が返されて・・・」 > などの配列等の動き、また、なんでObject1とObject2を逆にすると > 昇順、降順に入れ代わるのかです。 参考URLから辿ると良いと思います。理解される順番としては、まずはバブルソートからです。バブルソート以外は途端に難しくなります。 ソートをするためには、Comparator を実装すれば、あとはソートのライブラリー(マージソートやバブルソート)を呼べば、そのライブラリーがその Comparator を使って自動的にソートしてくれるので、通常はソートのアルゴリズムは意識しません。 なお、マージソートはどんなアルゴリズムか?というご質問でしたら、 http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%B8%E3%82%BD%E3%83%BC%E3%83%88 などにも短い解説はありますが、細かく解説するとかなり長くなります。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
> 訊きたいのは、例えば、 > 「まず10と4が比較されて10が大きいので1が返されて・・・」 > などの配列等の動き、 何でもいいから、ソートアルゴリズムを一つでも理解されていますか? マージソートの動きについては以下のページの解説がわかりやすいのではないかと思います。 マージソートと修正マージソートの違いはここでは本質的なものではないので、 マージソートの例で問題ないでしょう。 マージソート http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/merge-sort.html > また、なんでObject1とObject2を逆にすると > 昇順、降順に入れ代わるのかです。 obj2を主役にすることによって、大小関係の論理が逆転するから。 という説明でわかりますか? 自分でいくつかの適当な要素同士での compareTo の値を調べてみると いいんじゃないでしょうか・
お礼
お礼が遅くなりました。 回答ありがとうございました。 大小関係が逆転するからと言う説明をもとに実際に値を当てはめて考えてみまして、なんとなーく理解できた感じがします。ありがとうございました。
- Bonjin
- ベストアンサー率43% (418/971)
>どのような手順(アルゴリズム)でソートされるのでしょうか? 「ソートアルゴリズムは修正マージソートです」とJavaDocに書いてあります。 実装を見てみたければJDKに添付されているソースを見てみると良いでしょう。
お礼
早速の回答ありがとうございます。 すみません、私の質問の仕方が悪かったですね。 訊きたいのは、例えば、 「まず10と4が比較されて10が大きいので1が返されて・・・」 などの配列等の動き、また、なんでObject1とObject2を逆にすると 昇順、降順に入れ代わるのかです。 アルゴリズムはソートマージではなくて、修正マージソートですね。 うっかりしてました。
お礼
お礼が遅くなりました。 回答ありがとうございます。 あれからマージソートなどを参考URLで勉強しまして、マージソートはおぼろげですが理解できました。