質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

ソートのアルゴリズムを論理的に説明したい

解決済

回答 6

投稿

  • 評価
  • クリップ 1
  • VIEW 2,148

score 14

ソートのアルゴリズムを論理的に説明したい

C#の勉強中なのですが、
これまでプログラミングはもとより、
論理的思考や、アルゴリズムについても知識のない状態です。

現在は並び替えの問題に取り組む中で、
並び替えとは、どういうものか、どう考えれば良いか、
根本的な部分が足りないと感じています。

問題

ダンボールが3箱あり、それぞれ重さが異なります。
天秤を使い、重さを比べ、軽い順に並べます。
効率よく、並び替えるには、どういう方法があるでしょうか?

不明点

上記の問題は、ごく簡単な日常でもありえる並び替えだと思います。
漠然とは、理解しているつもりですが、
ですが、それを論理的に考え、明確な根拠のある
説明の仕方がわかりません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+4

上記の問題は、ごく簡単な日常でもありえる並び替えだと思います。 
漠然とは、理解しているつもりですが、 
ですが、それを論理的に考え、明確な根拠のある 
説明の仕方がわかりません。

そのまま日常の話として、天秤を使って並び換える方法を他の人、例えば今日入ってきた何も知らない新人に説明しなければならなくなった、として考えることになります。

お気付きのように、「他の人から説明の仕方」を教えてもらったとしても、自分で考えることができるようにはなりません。

質問文を「自分なら、このように説明するが、どの辺が伝わり難いか」という形に変えると、より有意義な回答を得ることができるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

目的が何かということを意識してください。

並び替え(ソート)の目的はただ一つ、小さいものから大きいものの順に並べることです。
その目的を細分化していきます。細分化の仕方はいくつかあるでしょう。例えば

  1. 最大、あるいは最小のものから順次決定して並べる
  2. 小さなグループに分けて、その中で並び替えてから組み合わせる
  3. 部分的に整列させて、新しいものが整列済みの列の中のどこに入るかを調べる

という方法が考えられます。1を具象化したのが選択ソートやバブルソートであったり、最大の決め方特殊なものならヒープソートになったりします。2を具象化するとマージソートなどに、3からだと挿入ソートになります。
場合によってはこれらが組み合わさることになります。1と2を組み合わせると、「ある値より大きいか小さいか」というグループ分けの仕方になり、クイックソートなどになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

ダンボールの数がもっと多ければ様々なソートアルゴリズムがありますが、三つしかない、さらに天秤を使うことが決まっているのでは使えるアルゴリズムは限られます。
二回目に重いほうから比べるか軽い方から比べるかくらいの違いしかないでしょう。

自分の手を使わずに言葉だけで人にやらせるとしたらどうするか、その手順をそのまま説明すればいいだけだと思います。
というか、本当にこれが説明できないとしたらかなり問題です。おそらく幼稚園児でもできる子は多いと思います。難しく考えすぎてはいませんか?

とりあえず、天秤というのは二つの物の重さを比較する道具です。
最初の手順は、三つのうち任意の二つを選んで順位をつけるという一つの選択肢しかありません。
次の手順は、軽い方か重い方と残った一つを比べて順位をつけるという二つの選択肢しかありません。
これで三つの順位が決まる場合があります。
決まらなかった場合、もう一度天秤を使うことによって順位が決まります。
手順は多くて三つしかありません。考えることを放棄してはいませんか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+2

ソート
Wikipediaのページです。図も入っていておすすめです。
コードが書いてある場合もあり、自分で作ってみることもできます。
私はバブルソートと奇偶転置ソートしか作ったことがありません。

1.段ボール箱を適当に並べる。
2.左端から順に2つとって天秤にのせ重い方を右側に軽い方を左側に入れ替える。
3.入れ替わらなくなるまで繰り返す。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/25 15:01

    ありがとうございます。
    Wikipediaも確認しました。

    キャンセル

+1

高々3つだと効率も何もないんですが、それはさておき。
分からなくなったら、実際に実験をしてみるのが良いです。ただしその際に手順を一つ一つ確認して。そうすると無意識のうちにやっていることに気付けます。
まあ荷物を用意するのは面倒ですから、トランプを用意するのが良いですかね。手軽ですし。

余談:
昔新人教育の講師をやらされた時に、ソートを教えるのにトランプを使って、バブルソートを実際に手札でやらせてみたら、わりと理解が早かったですね。
手持ち用の2セットと講義用の巨大サイズ1セット、領収書切るわけにもいかず、自腹切りましたけど……

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/bubble-sort.html

とか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る